在 Phusion Passenger Docker 镜像中选择特定的 Ruby 版本

在 Phusion Passenger Docker 镜像中选择特定的 Ruby 版本

我正在尝试在 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

我通过一些改变解决了这个问题。

首先,我使用了 ruby​​23 变体而不是完整变体:

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 就可以正常工作了

相关内容