如何在Docker中正确安装RVM?

时间:2017-04-25 14:04:07

标签: ruby bash docker rvm

这就是我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安装的原因。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:13)

长话短说:

docker -it --rm myimage /bin/bash命令不会将bash作为登录shell启动。

说明:

当您运行$ docker -it --rm myimage /bin/bash时,它会在没有-l选项的情况下调用bash,这会使bash表现为已作为登录shell调用,rvm初始化取决于source - ing /path/to/.rvm/scripts/rvm/etc/profile.d/rvm.sh,初始化位于.bash_profile.bashrc或任何其他初始化脚本中。

  

我该如何解决?

如果您希望始终使用ruby添加rvm选项-l

这是一个已安装ruby rvm的Dockerfile:

FROM debian

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -q && \
    apt-get install -qy curl ca-certificates gnupg2 build-essential --no-install-recommends && apt-get clean

RUN gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
RUN curl -sSL https://get.rvm.io | bash -s
RUN /bin/bash -l -c ". /etc/profile.d/rvm.sh && rvm install 2.3.3"
# The entry point here is an initialization process, 
# it will be used as arguments for e.g.
# `docker run` command 
ENTRYPOINT ["/bin/bash", "-l", "-c"]

运行容器:

➠ docker_templates : docker run -ti --rm rvm 'ruby -v'
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
➠ docker_templates : docker run -ti --rm rvm 'rvm -v'
rvm 1.29.1 (master) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io/]
➠ docker_templates : docker run -ti --rm rvm bash
root@efa1bf7cec62:/# rvm -v
rvm 1.29.1 (master) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io/]
root@efa1bf7cec62:/# ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
root@efa1bf7cec62:/# 

答案 1 :(得分:4)

请勿使用RUN bash -l -c rvm install 2.3.3。非常sc您可以通过SHELL [ "/bin/bash", "-l", "-c" ]设置shell命令,只需调用RUN rvm install 2.3.3