Según la documentación oficial:
Solo puede haber un CMD
instrucción en un Dockerfile . Si incluye más de un CMD
entonces solo los últimos CMD
entrará en vigor.
Y su Dockerfile tiene dos comandos CMD, por lo que el comando php-fpm
anulará
/usr/bin/supervisord
Para que pueda ejecutar comandos PHP pero no puede encontrar el socket del supervisor creado en el contenedor.
Puede solucionar su problema eliminando los últimos CMD
comando relacionado con PHP-FPM
como ya configuró supervisor para iniciarlo y su Dockerfile debe tener un CMD
comando:
CMD ["/usr/bin/supervisord"]
La idea aquí es eliminar al supervisor y, en su lugar, ejecutar lo que el supervisor solía ejecutar en varios contenedores diferentes. Puedes orquestar esto fácilmente con docker-compose
, por ejemplo, todos ejecutando el mismo contenedor con diferentes CMD
overrides, o el mismo contenedor con un CMD
diferente capa al final para dividirlo. El problema aquí es que el supervisor no podrá comunicar el estado de los procesos que administra a Docker. Siempre estará "vivo", incluso si todos sus procesos están completamente destrozados. Exponerlos directamente significa que puedes ver que fallaron.
Lo mejor es dividir cada uno de estos servicios en contenedores separados. Dado que hay oficiales preconstruidos para MySQL, etc., realmente no hay razón para construir uno usted mismo. Lo que quieres hacer es traducir ese supervisord
configuración a docker-compose
formato.
Con contenedores separados puedes hacer cosas como docker ps
para ver si sus servicios se ejecutan correctamente, todos se enumerarán individualmente. Si necesita actualizar uno, puede hacerlo fácilmente, simplemente trabaje con ese contenedor, en lugar de tener que desmontarlo todo.
La forma en que lo está atacando aquí es tratar a Docker como una máquina virtual elegante, que en realidad no lo es. Lo que es en cambio es un gestor de procesos , donde estos procesos tienen imágenes de disco preconstruidas y una capa de seguridad a su alrededor.
Componga su entorno a partir de contenedores de un solo proceso y su vida será mucho más fácil tanto desde una perspectiva de mantenimiento como de supervisión.
Si puede expresar esta configuración como algo docker-compose
puede manejar, entonces está un paso más cerca de pasar a una capa de administración más sofisticada como Kubernetes, que podría ser la conclusión lógica de esta migración en particular.