如果使用官方docker导轨图像如何添加自我gem文件到Dockerfile?

docker中心的官方导轨图像:

https://hub.docker.com/_/rails/

我创build了一个Dockerfile,如下所示:

FROM rails:onbuild ENV RAILS_ENV=production ADD vendor/gems/my_gem /usr/src/app/vendor/gems/my_gem CMD ["sh", "/usr/src/app/init.sh"] 

我的init.sh

 #!/bin/bash bundle exec rake db:create db:migrate bundle exec rails server -b 0.0.0.0 

我的Gemfile

 ... gem 'my_gem', path: './vendor/gems/my_gem' ... 

当我build立我的docker形象时:

 docker build -t myapp . 

它说:

 ... The path `/usr/src/app/vendor/gems/my_gem` does not exist. The command '/bin/sh -c bundle install' returned a non-zero code: 13 

默认path是/usr/src/app 。 如何在那里添加特殊文件?

docker ADD将添加相对于正在构build的源目录 (构build的上下文)的<src> (当它是一个文件夹,而不是一个url)。

所以你需要确保你的当前目录做docker build . 也包括vendor/gems/my_gem

OP scho 在评论中报告

当我改变到FROM rails:4.2.1 ,它的工作。

如docker rails中所述 :

这个图像( rails:onbuild )包含多个ONBUILD触发器,它们应该覆盖大部分应用程序。
构build将COPY . /usr/src/app COPY . /usr/src/appRUN bundle installEXPOSE 3000 ,并将默认命令设置为rails server

这意味着ADD命令可能不需要,并且与ONBUILD触发COPY冲突。
这与使用rails:4.2.1不同rails:4.2.1 ,其中ADDCOPY留给Dockerfile规范(而不是ONBUILD触发器)。