如何使用 Dockerfile 在单独的容器中运行 sidekiq 和 Rails。在本地,我使用 docker compose 来构建容器,因为它为应用程序、sidekiq 和 redis 创建了 3 个独立的容器,但是当我部署使用 Dockerfile 的应用程序时,sidekiq 和 Rails 在同一容器中运行,而 sidekiq 在前台运行并处理作业。如何让sidekiq在后台运行?
Sidekiq 版本 - 6.3.1 | Rails 版本 - 6.0.3 |红宝石 - 2.7
Dockerfile:
FROM ruby:2.7
RUN mkdir -p /src
ENV RAILS_ENV="development"
COPY Gemfile* /src/
RUN apt-get update && \
apt-get install -y unzip && \
.
.
.
.
.
RUN bundle install
RUN mkdir tmp
RUN chmod +x bin/docker-entrypoint.sh
CMD bin/docker-entrypoint.sh
bin/docker-entrypoint.sh :
#!/bin/bash
set -e
rake db:create
rake db:migrate
bundle exec sidekiq -e "${RAILS_ENV}" -C config/sidekiq.yml & bundle exec rails s
最好的方法是在与 Rails 进程不同的容器中运行 Sidekiq。您可以使用相同的 Dockerfile,只需更改入口点,例如:
if [ "$1" = "sidekiq" ]; then
bundle exec sidekiq
else
exec "$@"
fi
这样,无论是否使用 compose,都可以轻松在本地运行,并且可以随时部署,只需将标志传递到入口点即可。