docker-compose 运行 命令在 运行ning bundle install 后找不到 gem
docker-compose run command cannot find gem after running bundle install
我正在为我的 rails 应用程序使用 docker-compose。
我最近更新了我的 master b运行ch,将 rails 版本更新到 5.2.3 -- 我 运行 通过 docker 捆绑安装-撰写:
docker-compose run web bundle install
看起来像 运行 很好,但是当我尝试 运行 rspec 时,我得到了这个错误:
Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.
我尝试 运行 bundle update activesupport
- 得到这个:
Bundler attempted to update activesupport but its version stayed the same
Bundle updated!
所以我尝试手动安装 gem:
docker-compose run web gem install activesupport
Fetching activesupport-5.2.3.gem
Successfully installed activesupport-5.2.3
1 gem installed
然后我再次尝试 运行 rspec,同样的事情:
$ docker-compose run web bin/rspec ./spec/some_spec.rb
Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.
docker-compose 是否接受了 gem/bundler 的更改?我在这里遗漏了什么吗?
每个 docker-compose run
都在启动一个新容器。
运行 两次,然后 运行 docker ps -a
你会看到两个 Exited 容器。
您需要 运行 您的 bundle install
作为图像构建过程的一部分,在您的 Dockerfile
.
中
作为旁注提示,通常的做法是首先仅复制 Gemfile
和 Gemfile.lock
文件,运行 bundle install
,然后才复制整个文件应用程序。通过这种方式,您可以创建两个独立的层,并避免在应用程序文件更改时重新安装所有 gem。
这里有一个Dockerfile
供参考
FROM ruby:2.5.3
WORKDIR $RAILS_ROOT
# ... more custom stuff here ...
# Pre-install gems
COPY Gemfile* ./
RUN gem install bundler && bundle install --jobs=3 --retry=3
# Copy app files
COPY . .
RUN chmod -R 755 $RAILS_ROOT/bin
# Run server
EXPOSE 3000
CMD bundle exec rails s -b 0.0.0.0 -p 3000
docker-compose run
每次调用都会创建一个新容器,您的更改不会保留。
如果您希望您的更改持续存在,请使用 docker-compose exec
,它会在 运行 容器中运行您的命令。
我正在为我的 rails 应用程序使用 docker-compose。
我最近更新了我的 master b运行ch,将 rails 版本更新到 5.2.3 -- 我 运行 通过 docker 捆绑安装-撰写:
docker-compose run web bundle install
看起来像 运行 很好,但是当我尝试 运行 rspec 时,我得到了这个错误:
Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.
我尝试 运行 bundle update activesupport
- 得到这个:
Bundler attempted to update activesupport but its version stayed the same
Bundle updated!
所以我尝试手动安装 gem:
docker-compose run web gem install activesupport
Fetching activesupport-5.2.3.gem
Successfully installed activesupport-5.2.3
1 gem installed
然后我再次尝试 运行 rspec,同样的事情:
$ docker-compose run web bin/rspec ./spec/some_spec.rb
Could not find activesupport-5.2.3 in any of the sources
Run `bundle install` to install missing gems.
docker-compose 是否接受了 gem/bundler 的更改?我在这里遗漏了什么吗?
每个 docker-compose run
都在启动一个新容器。
运行 两次,然后 运行 docker ps -a
你会看到两个 Exited 容器。
您需要 运行 您的 bundle install
作为图像构建过程的一部分,在您的 Dockerfile
.
作为旁注提示,通常的做法是首先仅复制 Gemfile
和 Gemfile.lock
文件,运行 bundle install
,然后才复制整个文件应用程序。通过这种方式,您可以创建两个独立的层,并避免在应用程序文件更改时重新安装所有 gem。
这里有一个Dockerfile
供参考
FROM ruby:2.5.3
WORKDIR $RAILS_ROOT
# ... more custom stuff here ...
# Pre-install gems
COPY Gemfile* ./
RUN gem install bundler && bundle install --jobs=3 --retry=3
# Copy app files
COPY . .
RUN chmod -R 755 $RAILS_ROOT/bin
# Run server
EXPOSE 3000
CMD bundle exec rails s -b 0.0.0.0 -p 3000
docker-compose run
每次调用都会创建一个新容器,您的更改不会保留。
如果您希望您的更改持续存在,请使用 docker-compose exec
,它会在 运行 容器中运行您的命令。