如何更新我的Docker主机上的Gemfile.lock?

在Docker容器中使用Rails时, 多个 post (包括docker.com上的一个post )使用以下模式:

  1. Dockerfile执行ADD GemfileADD Gemfile.lock ,然后RUN bundle install
  2. docker-compose run web rails new创build一个新的Rails应用程序docker-compose run web rails new

由于我们RUN bundle install来构build镜像,所以在更新Gemfile之后, Gemfile docker-compose build web似乎是合适的。

这可以工作,因为gemset会在图像内更新,但是:

Docker主机上的Gemfile.lock 将不会更新以反映对Gemfile的更改。 这是一个问题,因为:

  1. Gemfile.lock 应该在你的仓库中 ,并且:

  2. 它应该与您当前的Gemfile 一致


所以:

如何更新主机上的Gemfile.lock ,以便可以检入版本控制?

run 执行bundle 更新主机上的Gemfile.lock

 docker-compose run web bundle 

但是:您必须再次build图像。

TL; DR – 在容器上进行更改,在容器上运行软件包,然后重新启动以进行良好测量。 在本地这些更改将反映在您的应用程序,并准备testing/推出混帐,您的生产服务器将使用它来重build。

长; 读:

  1. docker exec -it name_of_app_1 bash

  2. vim Gemfile ,把像gem 'sorcery', '0.9.0' vim Gemfile gem 'sorcery', '0.9.0'这样的东西gem 'sorcery', '0.9.0'我觉得这确保你得到你正在寻找的版本

  3. bundle在当前容器的GemfileGemfile.lock得到这个版本

这已经是半正常的“Rails”types的东西在这里,只是你正在做的容器正在运行。 现在,您不必担心git,并将这些更改。 你的git回购,因为这些更改都发生在本地副本上。 所以,打开一个terminal标签,进入你的应用程序和less Gemfile ,你应该看到的变化。

  1. 现在你可以重新启动你的运行容器。 你的Dockerfile将被重build(在我的情况下,通过docker-在本地docker-compose up ,testing应该通过。

将你的改变提交给git,并使用你的部署过程在分期中进行检查。

笔记:

检查像OP的链接所说的Dockerfile 。 我假设你在Dockerfile有一些bundlebundle install

只是要清楚,要运行的命令是:

 docker-compose run web bundle docker-compose up --build 

其中web是您的Dockerized Rails应用程序的名称。