在获取RVM路径后,Docker容器内未发现宝石



场景1

所以我面临的问题就像在构建docker镜像之后一样。如果我进入docker容器并执行GEM_PATH=$GEM_HOME gem list,它不会显示在构建映像时安装的所有gem。它只展示了几颗宝石。

场景2

如果我没有在Dockerfile中寻找RVM路径。然后,如果我进入docker容器并执行GEM_PATH=$GEM_HOME gem list,那么它将显示所有的宝石。

有人能向我解释为什么会发生这种情况,以及我应该如何安装和获取RVM吗?所以我可以看到容器里所有的宝石。基本上,我希望场景1能起作用。感谢

下面是我的Dockerfile

FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y sudo && apt-get install -y build-essential && apt-get install -y apt-utils && apt-get install -y git
RUN gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && curl -sSL https://get.rvm.io | sudo bash -s stable --ruby && echo 'source /usr/local/rvm/scripts/rvm' >> /etc/bash.bashrc
RUN /bin/bash -l -c 'gem install bundler -v 1.17.3'
RUN /bin/bash -l -c 'gem install rails --version=5.2.4.1'
WORKDIR /app
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle config set path 'vendor/bundle'
COPY Gemfile Gemfile.lock ./
ARG SSH_KEY
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy ssh
RUN echo "$SSH_KEY" > /root/.ssh/id_rsa && 
chmod 0600 /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
RUN bundle install
COPY . ./
EXPOSE 80:80
CMD rails s -p 80 -b '0.0.0.0' -e qa

TL;DR:不要在容器中使用rvm\rbenv

当使用容器时,整个过程就是将所有依赖项捆绑\打包在一个容器中。例如,如果您需要ruby 2.9,那么使用安装了ruby 2.9的docker映像,而不是使用rvm[rbenv](https://github.com/rbenv/rbenv)。

由于您使用的是bundler,我建议您将railsgem添加到其中,并让bundler管理依赖关系。

我假设您关心安装用于缓存提议的rubygem的目录,并且我看到您指示bundler什么是rubygem主目录

RUN bundle config set path 'vendor/bundle'

最新更新