我正在尝试在 Phusion-Passenger Docker 镜像中部署 Rails 应用程序:
https://github.com/phusion/passenger-docker
该应用程序的 Gemfile 指定 Ruby 版本 2.3.1,但镜像默认附带 2.2.5,因此捆绑安装失败。
我已阅读过几次文档,但我不清楚是否可以使用此图像来使用不同主要/次要版本的 Ruby。
我在 Dockerfile 中尝试了以下内容
FROM phusion/passenger-full
ARG app_init=default
# Set correct environment variables.
ENV HOME /root
# Use baseimage-docker's init process.
CMD ["/sbin/my_init"]
RUN bash -lc 'rvm install ruby-2.3.1'
RUN bash -lc 'rvm --default use ruby-2.3.1'
确实安装并将 Ruby 2.3.1 设置为默认值,在构建 Docker 映像时,“bundle install”步骤超时。
当我打开容器的 shell 并将 Ruby 重置为 2.2.5 时,bundle install 就可以正常工作。
是否可以将该图像与 Ruby 2.3.1 一起使用而不是 Ruby 2.2.5?
答案1
我通过一些改变解决了这个问题。
首先,我使用了 ruby23 变体而不是完整变体:
FROM phusion/passenger-ruby23
这可能不是必需的,但它会减小构建图像的大小。
其次,我添加了一个额外的运行命令来更新 bundler gem:
RUN bash -lc 'rvm install ruby-2.3.1'
RUN bash -lc 'rvm --default use ruby-2.3.1'
RUN gem install bundler
将这些更改添加到 Dockerfile 后,bundle install 就可以正常工作了