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.