Код с Passenger - в одном контейнере, nginx в другом и реверсит на первый. Желательно статику класть отдельно, чтобы можно было скормить nginx.
Минимальный Dockerfile:
FROM ruby:2.5-alpine
ADD . /app
WORKDIR /app
RUN bundle install
CMD ["bundle", "exec", "passenger", "start"]
docker-compose.yml:
version: '2'
services:
passenger:
build: ./
restart: always
#ports:
# - 3000:3000 (для дебага)
nginx:
image: nginx:mainline-alpine
restart: always
volumes:
#- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx-site.conf:/etc/nginx/conf.d/passenger.conf
#- /path/to/static/:/path/in/container/
В nginx-site.conf вместо passenger-директив (возможно понадобятся заголовки для проксирования типа X-Real-IP):
proxy_pass http://passenger:3000;