web-dev-qa-db-ja.com

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インストールから取得されていない理由です。どうすれば修正できますか?

12
yegor256

短い話:

docker -it --rm myimage /bin/bashコマンドは、ログインシェルとしてbashを起動しません。

説明:

$ docker -it --rm myimage /bin/bashを実行すると、-lオプションなしでbashが呼び出され、bashがログインシェルとして呼び出されたかのように動作し、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:/# 
16
Зелёный

RUN bash -l -c rvm install 2.3.3は使用しないでください。それは非常にだらしないです。 Shell [ "/bin/bash", "-l", "-c" ]でシェルコマンドを設定し、RUN rvm install 2.3.3を呼び出すだけです。

6
ALev