gpt4 book ai didi

docker - build process下命令和shell中命令的区别

转载 作者:行者123 更新时间:2023-12-02 00:59:08 25 4
gpt4 key购买 nike

我有这样的 Dockerfile:

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN apt-get install imagemagick libmagickcore-dev libmagickwand-dev
RUN gem install bundle
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
COPY . /app
RUN bundle install

docker-compose.yml

version: '3.3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
volumes:
db_data:

我正在进入容器并运行 bundle install 命令:

docker-compose run web bundle install

没有错误:

...
Bundle complete! 28 Gemfile dependencies, 98 gems now installed.
Bundled gems are installed into `/usr/local/bundle`

但是当我构建容器时它会产生一些错误:

docker-compose build web

Bundler could not find compatible versions for gem "activemodel":
In snapshot (Gemfile.lock):
activemodel (= 5.2.1)

In Gemfile:
activeresource was resolved to 5.0.0, which depends on
activemodel-serializers-xml (~> 1.0) was resolved to 1.0.2, which depends
on
activemodel (> 5.x)

activeresource was resolved to 5.0.0, which depends on
activemodel (< 6, >= 5.0)

carrierwave was resolved to 1.2.3, which depends on
activemodel (>= 4.0.0)

protected_attributes was resolved to 1.0.2, which depends on
activemodel (< 5.0, >= 4.0.0.beta)

rails (= 5.2.1) was resolved to 5.2.1, which depends on
activemodel (= 5.2.1)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
ERROR: Service 'web' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 6

我试图了解这些环境之间的区别(?):构建过程和 shell 但命令 bundle install 是相同的。

为什么构建过程会产生错误?

附言

docker image list                                                                                                           docker●[ruby-2.5.1p57]
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 6f5884e6a480 2 minutes ago 987MB
dev_web latest 44c878bad0f2 About an hour ago 1.21GB
<none> <none> ca720e782976 3 hours ago 1.21GB
ruby 2.5 34d1c6024e99 37 hours ago 869MB

docker ps -a docker●[ruby-2.5.1p57]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbd1c5dfd92b 6f5884e6a480 "/bin/sh -c 'bundle …" 55 seconds ago Exited (6) 39 seconds ago elated_meitner

最佳答案

当您运行 docker-compose build web 时,它将尝试根据 Dockerfile 中的规范构建 docker 镜像。当您运行 docker-compose run web XXX 时,它将使用命令 XXX 为 existing 图像运行容器 web。这意味着 Dockerfile 中的命令将不会被执行。错误很可能来自 Gemfile 中的错误配置,但我没有这方面的经验。

关于docker - build process下命令和shell中命令的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51933828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com