如果使用官方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/app
,RUN bundle install
,EXPOSE 3000
,并将默认命令设置为rails server
。
这意味着ADD
命令可能不需要,并且与ONBUILD
触发COPY
冲突。
这与使用rails:4.2.1
不同rails:4.2.1
,其中ADD
或COPY
留给Dockerfile
规范(而不是ONBUILD
触发器)。