Docker Hub上的官方Rails图像:
https://hub.docker.com/_/rails/
我创建一个类似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
我的 gem 文件
...
gem 'my_gem', path: './vendor/gems/my_gem'
...
当我构建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
默认路径是
/usr/src/app
。如何在那里添加特殊文件? 最佳答案
docker ADD
将相对于正在构建的源目录(构建的上下文)添加<src>
(当它是文件夹时,而不是URL)。
因此,在执行docker build .
时,您需要确保当前目录也是包含vendor/gems/my_gem
的目录。
OP scho报告in the comments
如docker rails中所述:
这意味着可能不需要ADD
命令,并且与ONBUILD
触发的COPY
冲突。
这与使用rails:4.2.1
不同,后者使用ADD
或COPY
保留Dockerfile
规范(与ONBUILD
触发器相对)。