This is what I have in my 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"
Works just fine, however, when I start the container, I see this:
$ 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]
Obviously, this is not what I want. As far as I understand, the problem is that bash
doesn't run /etc/profile
by default. That's why Ruby is not coming from the RVM installation. How can I fix that?
It allows you to add, remove, or have multiple versions of Ruby and its libraries live in your user directory.
Long story short:
docker -it --rm myimage /bin/bash
command does not start bash as a login shell.
Explanation:
When you run $ docker -it --rm myimage /bin/bash
it's invoke bash without the -l
option which make bash
act as if it had been invoked as a login shell, rvm
initializations depends on the source
-ing /path/to/.rvm/scripts/rvm
or /etc/profile.d/rvm.sh
and that initialization is in .bash_profile
or .bashrc
or any other initialization scripts.
How can I fix that?
If you won't, always have the ruby
from rvm
add -l
option.
Here is a Dockerfile with installed ruby
by rvm
:
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"]
Run the container:
➠ 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:/#
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With