如何在 Docker 中正确安装 RVM?
How to correctly install RVM in Docker?
这是我的 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 作为登录 shell。
解释:
当你 运行 $ docker -it --rm myimage /bin/bash
它调用 bash 时没有 -l
选项,这使得 bash
就像它被调用为登录 shell, rvm
初始化取决于 source
-ing /path/to/.rvm/scripts/rvm
或 /etc/profile.d/rvm.sh
并且初始化在 .bash_profile
或 .bashrc
或任何其他初始化脚本。
How can I fix that?
如果您不愿意,请始终让 rvm
中的 ruby
添加 -l
选项。
这是 rvm
:
安装了 ruby
的 Dockerfile
FROM Debian
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -q && \
apt-get install -qy procps 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:/#
不要使用 RUN bash -l -c rvm install 2.3.3
。它很邋遢。您可以通过 SHELL [ "/bin/bash", "-l", "-c" ]
设置 shell 命令并简单地调用 RUN rvm install 2.3.3
.
这是我的 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 作为登录 shell。
解释:
当你 运行 $ docker -it --rm myimage /bin/bash
它调用 bash 时没有 -l
选项,这使得 bash
就像它被调用为登录 shell, rvm
初始化取决于 source
-ing /path/to/.rvm/scripts/rvm
或 /etc/profile.d/rvm.sh
并且初始化在 .bash_profile
或 .bashrc
或任何其他初始化脚本。
How can I fix that?
如果您不愿意,请始终让 rvm
中的 ruby
添加 -l
选项。
这是 rvm
:
ruby
的 Dockerfile
FROM Debian
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -q && \
apt-get install -qy procps 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:/#
不要使用 RUN bash -l -c rvm install 2.3.3
。它很邋遢。您可以通过 SHELL [ "/bin/bash", "-l", "-c" ]
设置 shell 命令并简单地调用 RUN rvm install 2.3.3
.