Я пытаюсь развернуть проект Ruby на Rails, используя docker, но у меня возникли некоторые проблемы. Мой Dockerfile выглядит следующим образом
FROM ruby:2.6.3
WORKDIR /usr/src/app
RUN apt-get update -qq && \
apt-get install -y nodejs && \
gem install --no-document rails -v 5.2.3
COPY ./Gemfile ./Gemfile.lock ./
COPY ./.gemrc ~/
RUN printf "gem: --no-rdoc --no-ri --no-document" | tee /etc/gemrc ~/.gemrc && \
gem install bundler -v '2.1.4'
RUN bundle install --jobs 2
COPY . .
COPY ./docker-entrypoint.sh /usr/bin
RUN chmod +x /usr/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "puma"]
, а docker-entrypoint.sh
используется, чтобы гарантировать, что сервер не использует повторно pid, и выглядит так
#!/bin/sh
set -e
if [ -f tmp/pids/server.pid ]; then
rm tmp/pids/server.pid
fi
exec bundle exec "$@"
Образ успешно создается с docker build -t rails_app
, но когда я запускаю его с docker run -p 3000:3000 rails_app
, ошибки не выдаются, но на экран не выводятся выходные данные. Затем, когда я нажимаю Control- C, чтобы остановить контейнер, он выдает мне вывод запуска сервера puma, а затем останавливается сам.
docker run -p 3000:3000 rails_app
^C=> Booting Puma
=> Rails 5.2.4.2 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.4 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2020-04-19 21:42:28 +0000 ===
Goodbye!
Exiting
Что нужно сделать, чтобы контейнер запустил сервер до того, как Я закрываю контейнер? Кроме того, до нажатия Control- C на localhost: 3000 ничего не найдено, поэтому сервер не запустился без вывода сообщений.