Dockerfile Многоступенчатый в ruby - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать 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. Вот почему мне нужен еще один этап, отделенный от этапа компоновщика.

...