docker集装箱知道rbenv全球但不是ruby

运行我的docker容器时,它知道rbenv全球。 但是,当它尝试通过rubyfindruby,或者which ruby或哪里whereis ruby我什么也得不到。 它也不承认rails-apigem 。 到底是怎么回事?

Dockerfile

 FROM centos:6.6 RUN yum update -y RUN yum install git openssl-devel openssh-server sudo openssl readline-devel readline zlib-devel zlib libxml2-devel libxml2 libxslt-devel libxslt nginx tar gcc libaio libaio-devel -y RUN rpm -Uvh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-12.5.1-1.el6.x86_64.rpm RUN sed -i -e "s/Defaults requiretty.*/ #Defaults requiretty/g" /etc/sudoers RUN mkdir -p /var/run/sshd RUN useradd -m -u 1000 -G wheel deploy && echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/wheel USER deploy RUN mkdir ~/dev RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv/ RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build ENV PATH ~/.rbenv/bin:$PATH RUN echo 'eval "$(rbenv init -)"' >> ~/.bash_profile RUN source ~/.bash_profile ENV CONFIGURE_OPTS --disable-install-doc RUN rbenv install 2.2.3 RUN rbenv global 2.2.3 RUN bash -l -c 'gem update --system' RUN bash -l -c 'gem update' RUN bash -l -c 'gem install nokogiri -- --use-system-libraries' RUN bash -l -c 'gem install bundler rails-api --no-rdoc --no-ri' COPY oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm /tmp/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm COPY oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm /tmp/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm COPY oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm /tmp/oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm RUN sudo rpm -Uvh /tmp/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm RUN sudo rpm -Uvh /tmp/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm RUN sudo rpm -Uvh /tmp/oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm RUN sudo touch /etc/sysconfig/network RUN NLS_LANG=American_America.UTF8 ENV ORACLE_HOME=/usr/lib/oracle/12.1/client64 ENV LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib EXPOSE 22 EXPOSE 3000 EXPOSE 5000 

这里的问题是Dockerfile中的每个RUN语句都在自己的环境中发生。 RUN source ~/.bash_profile将设置$PATH来在其中包含/root/.rbenv/shims 。 但是随后的RUN将不会设置这个环境,因为它们不会获取.bash_profile因为这不是一个交互式shell。

解决这个问题的简单方法是在rubygem命令之前添加一个ENV PATH $HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH 。 这实际上是你从rbenv初始化shell脚本中需要的唯一的一点。

你安装新的Ruby版本后,你试过rbenv rehash