Docker Compose no incluye la funcionalidad requerida. La construcción de plantillas de archivos de Docker de Discourse permite resultados de Docker flexibles. Con Compose, todo lo que tienes es un conjunto posible de Dockerfiles fijos que pueden resultar en un montón de contenedores.
En mi configuración de Discourse, uso un solo contenedor con Discourse y nginx usando un socket UNIX. PostgreSQL y Redis son un servicio en el host. Eso es una desviación bastante grande de la configuración predeterminada, pero es posible de fábrica.
Es parcialmente posible con Compose, quizás usando la característica de perfil bastante mal diseñada. Pero incluso entonces es bastante desordenado. O necesitarías entregar diferentes archivos de Compose para cada variación.
Simplemente estás trasladando el problema.
Una configuración limpia de Compose para Discourse sería los siguientes servicios en contenedores separados:
- Discourse
- nginx
- PostgreSQL
- Redis
Discourse y nginx necesitan compartir un volumen, no es gran cosa.
PostgreSQL y Redis… esas son cosas que podrías querer alojar en otro lugar, y no tener un contenedor específico de Discourse para ello. Y ahora Docker Compose se convierte en un problema: docker compose up -d lanzará tu PostgreSQL no deseado. Ok, entonces lo hacemos docker compose --profile postgresql up -d para lanzar la configuración básica de Discourse y un contenedor de PostgreSQL. docker compose --profile postgresql --profile redis up -d para la configuración de contenedor de Discourse “completa” autocontenida. Será mejor que no olvides un argumento --profile ..., porque entonces tendrás más problemas.
Así que para una mejor experiencia de usuario (UX), creas un lanzador para encargarte de crear el comando Docker Compose deseado. Ahora estamos más o menos de vuelta donde estábamos. Excepto que las modificaciones en el contenedor de nginx aún no son posibles. ¿Así que necesito un contenedor nginx-http y un contenedor nginx-unix que deberían ser mutuamente excluyentes? …
Claro, la gestión de plugins podría ser mejor, pero hacer esto con Docker Compose, eso será un infierno.