Как правильно установить RVM в 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. Как я могу это исправить?

2 ответа

Решение

Короче:

docker -it --rm myimage /bin/bash Команда не запускает bash в качестве оболочки для входа.

Объяснение:

Когда ты бежишь $ docker -it --rm myimage /bin/bash это вызывает Баш без -l вариант, который делает bash действовать так, как если бы он был вызван как оболочка входа в систему, rvm инициализация зависит от source-ную /path/to/.rvm/scripts/rvm или же /etc/profile.d/rvm.sh и что инициализация находится в .bash_profile или же .bashrc или любые другие сценарии инициализации.

Как я могу это исправить?

Если вы хотите всегда иметь ruby от rvm добавлять -l вариант.

Вот Dockerfile с установленным 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 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" ] и просто позвони RUN rvm install 2.3.3,

Другие вопросы по тегам