Если у вас есть две длительные задачи, которые вы хотите выполнить в одной и той же базе кода, вы можете запустить два отдельных контейнера из одного и того же образа. В Docker Compose синтаксис, который будет выглядеть так:
version: '3'
services:
db: { ... }
db-test: { ... }
web:
build: .
command: bundle exec rails s -b 0.0.0.0 -p 3000
ports:
- "3000:3000"
depends_on:
- db
- db-test
worker:
build: .
command: bundle exec rake jobs:work
depends_on:
- db
- db-test
Выполнение нескольких задач в одном контейнере довольно сложно и обычно не рекомендуется. Например, форма, к которой вы пришли в комментариях, запускает сервер Rails в качестве фоновой задачи, а затем делает работника основным контейнерным процессом;если по какой-то причине основное приложение Rails умирает, Docker не заметит этого, а если рабочий умрет, он возьмет с собой приложение Rails.