【发布时间】:2017-04-25 14:04:06
【问题描述】:
这就是我的Dockerfile:
RUN gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
RUN curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.3.3"
工作得很好,但是,当我启动容器时,我看到了:
$ docker -it --rm myimage /bin/bash
/root# ruby --version
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
/root# /bin/bash -l -c "ruby --version"
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
显然,这不是我想要的。据我了解,问题是bash 默认不运行/etc/profile。这就是为什么 Ruby 不是来自 RVM 安装的原因。我该如何解决?
【问题讨论】:
-
你的问题:为什么在 docker 容器中使用 rvm?以我的经验,docker 使 rvm 过时了。你为你需要的每个 ruby 版本建立一个新容器。不过,我可能缺少一些东西,我很想知道你为什么在 docker 中使用 rvm。
-
好问题。这是一个通用的 Docker 镜像,被许多项目使用。每个项目都必须能够使用自己的 Ruby 版本,只需说
rvm install 2.1.0,而无需创建自己的 Docker 映像。这一切都发生在 www.rultor.com 项目中。 -
有趣.... 在那种情况下,我会创建一个包含您需要的所有内容的基础映像,然后再选择特定的 ruby 版本。从那里,创建额外的 dockerfiles 从你的基础镜像继承
FROM并安装所需的特定 ruby 版本。不需要 rvm。当然,我过于简单化了这种情况。在现实生活中可能没那么容易:) -
您的场景更符合 Docker 的精神,但我们的用户需要更多的步骤。现在,只需在
.rultor.yml中输入rvm install 2.1.0,您就拥有了Ruby 2.1.0。无需 Docker 知识。 -
这当然是一个伟大的目标!我正在为另一个使用 Node.js v7 的项目做同样的事情 - 简化它,所以没有人需要知道任何关于 docker 的事情。