如何在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安装。 我该如何解决这个问题?
长话短说:
docker -it --rm myimage /bin/bash
命令不会将bash作为loginshell启动。
说明:
当你运行$ docker -it --rm myimage /bin/bash
它会调用bash,而不使用-l
选项,这使得bash
行为就像它已经被作为loginshell调用一样, rvm
初始化依赖于source
-ing /path/to/.rvm/scripts/rvm
或/etc/profile.d/rvm.sh
,初始化在.bash_profile
或.bashrc
或其他初始化脚本中。
我该如何解决这个问题?
如果你想要从rvm
add -l
选项得到ruby
。
这是一个由rvm
安装ruby
的rvm
:
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 eg # `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:/#