Драгоценные камни не найдены внутри контейнера Docker после поиска пути RVM

#ruby-on-rails #ruby #ruby-on-rails-3 #rubygems #bundler

#ruby-on-rails #ruby #ruby-on-rails-3 #rubygems #bundler

Вопрос:

сценарий 1

Итак, проблема, с которой я сталкиваюсь, как после создания образов docker. Если я захожу внутрь контейнера docker и делаю GEM_PATH=$GEM_HOME gem list это, не отображаются все драгоценные камни, установленные во время создания образа. он показывает только несколько драгоценных камней.

сценарий 2

Если я не ищу путь RVM внутри файла Dockerfile. Затем, если я захожу внутрь контейнера docker и делаю GEM_PATH=$GEM_HOME gem list это, он показывает все драгоценные камни.

Может кто-нибудь, пожалуйста, объяснить мне, почему это происходит и как я должен установить и использовать RVM? Итак, я вижу все драгоценные камни внутри контейнера. В принципе, я хочу, чтобы сценарий 1 должен работать. Спасибо

Ниже приведен мой Dockerfile

 FROM ruby:2.6.5
RUN apt-get update -qq amp;amp; apt-get install -y sudo amp;amp; apt-get install -y build-essential amp;amp; apt-get install -y apt-utils amp;amp; apt-get install -y git
RUN gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB amp;amp; curl -sSL https://get.rvm.io | sudo bash -s stable --ruby amp;amp; 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 amp;amp; 
   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
 

Ответ №1:

TL; DR: не используйте rvm rbenv внутри контейнера

все дело при использовании контейнеров заключается в том, чтобы связать упаковать все зависимости внутри контейнера. например, если вам нужен ruby 2.9, используйте образ docker, в котором установлен ruby 2.9, а не rvm [rbenv] (https://github.com/rbenv/rbenv ).

поскольку вы используете bundler, я посоветую вам добавить rails в него gem и позволить bundler управлять зависимостями.

я предполагаю, что вы заботитесь о каталоге, в котором устанавливаются rubygems для предложения кэширования, и я вижу, что вы точно указываете bundler, что такое домашний каталог rubygem

 RUN bundle config set path 'vendor/bundle'