Voici ce que j'ai dans mon 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"
Fonctionne très bien, cependant, lorsque je démarre le conteneur, je vois ceci:
$ 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]
Évidemment, ce n'est pas ce que je veux. D'après ce que je comprends, le problème est que bash
ne fonctionne pas /etc/profile
par défaut. C'est pourquoi Ruby ne vient pas de l'installation de RVM. Comment puis-je résoudre ce problème?
Longue histoire courte:
La commande docker -it --rm myimage /bin/bash
Ne démarre pas bash en tant que shell de connexion.
Explication:
Lorsque vous exécutez $ docker -it --rm myimage /bin/bash
, Il appelle bash sans l'option -l
Qui fait que bash
agit comme s'il avait été invoqué comme un shell de connexion, les initialisations de rvm
dépendent de source
- /path/to/.rvm/scripts/rvm
ou /etc/profile.d/rvm.sh
et cette initialisation est dans .bash_profile
ou .bashrc
ou tout autre script d'initialisation.
Comment puis-je résoudre ce problème?
Si vous voulez toujours avoir l'option Ruby
de rvm
ajouter -l
.
Voici un Dockerfile avec Ruby
installé par 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"]
Exécutez le conteneur:
➠ 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:/#
N'utilisez pas RUN bash -l -c rvm install 2.3.3
. C'est très miteux. Vous pouvez définir la commande Shell par Shell [ "/bin/bash", "-l", "-c" ]
et appelez simplement RUN rvm install 2.3.3
.