Я пытаюсь создать Docker образ в ruby для запуска определенной c программы. Я делаю это многоступенчатым в Docker файле. Когда я создаю образ, все работает нормально. Я использую эту команду
docker . build -t test
После этого я делаю команду docker run test
, и она должна дать такой результат:
Norme: ./Gemfile.lock
Warning: Not a valid file
Norme: ./norminette.rb
Warning: Not a valid file
Norme: ./README.md
Warning: Not a valid file
Norme: ./Gemfile
Warning: Not a valid file
Norme: ./config.conf
Warning: Not a valid file
Но когда я пытаюсь запустить программу, она дает следующая ошибка:
/usr/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- parseconfig (LoadError)
from /usr/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
from ./norminette.rb:5:in `<main>'
Если я попробую команду CMD ./norminette.rb
на этапе компоновки, программа запустится и выдаст правильный вывод.
Это файл Docker:
#################
# Stage: ruby
FROM ruby:2.7.1-alpine3.11 as ruby
LABEL description="Base ruby image used by other stages"
#################
# Stage: git
FROM alpine as git
LABEL description="Install git and clone norminette repository"
RUN apk --update add git less openssh && \
rm -rf /var/lib/apt/lists/* && \
rm /var/cache/apk/*
RUN git clone https://github.com/42sp/norminette-client.git /home/.norminette/
#################
# Stage: bundler
FROM ruby as bundler
LABEL description="Install and cache gems for all environments"
# Copy the Gemfile and Gemfile.lock
COPY --from=git /home/.norminette /home/.norminette
WORKDIR /home/.norminette
RUN bundle
#################
# Stage: runner
FROM ruby as runner
COPY --from=git /home/.norminette /home/.norminette
WORKDIR /home/.norminette
CMD ./norminette.rb
PS Я застрял здесь, но после исправления этой проблемы я собираюсь скопировать другую папку для запуска тонкой программы norminette.rb. Вот почему мне нужен еще один этап, отделенный от этапа компоновщика.