Secondo la documentazione ufficiale:
Ci può essere un solo
CMD
istruzione in un Dockerfile . Se elenchi più di unCMD
poi solo l'ultimoCMD
avrà effetto.
E il tuo Dockerfile ha due comandi CMD quindi il comando php-fpm
sovrascriverà
/usr/bin/supervisord
In modo che tu possa eseguire i comandi PHP ma non riesci a trovare il socket del supervisore creato nel contenitore.
Puoi risolvere il problema eliminando l'ultimo CMD
comando relativo a PHP-FPM
come hai già configurato supervisore per avviarlo e il tuo Dockerfile dovrebbe avere un CMD
comando:
CMD ["/usr/bin/supervisord"]
L'idea qui è di eliminare il supervisore e invece eseguire qualunque cosa il supervisore eseguisse in diversi contenitori. Puoi facilmente orchestrarlo con docker-compose
, ad esempio, tutti eseguono lo stesso contenitore con CMD
diversi sostituzioni o lo stesso contenitore con un CMD
diverso strato alla fine per dividerlo. Il problema qui è che il supervisore non sarà in grado di comunicare lo stato dei processi che gestisce a Docker. Sarà sempre "vivo" anche se tutti i suoi processi sono completamente distrutti. Esporli direttamente significa che puoi vedere che si sono bloccati.
La cosa migliore è suddividere ciascuno di questi servizi in contenitori separati. Dato che ce ne sono di ufficiali pre-costruiti per MySQL e così via, non c'è davvero alcun motivo per crearne uno tu stesso. Quello che vuoi fare è tradurre quel supervisord
config a docker-compose
formato.
Con contenitori separati puoi fare cose come docker ps
per vedere se i tuoi servizi funzionano correttamente, verranno elencati tutti singolarmente. Se hai bisogno di aggiornarne uno, puoi farlo facilmente, lavori solo con quel container, invece di dover smontare tutto.
Il modo in cui lo stai attaccando qui sta trattando Docker come una macchina virtuale di fantasia, cosa che in realtà non è. Quello che è invece è un process manager , in cui questi processi hanno immagini disco predefinite e un livello di sicurezza attorno a loro.
Componi il tuo ambiente da container a processo singolo e la tua vita sarà molto più semplice sia dal punto di vista della manutenzione che del monitoraggio.
Se puoi esprimere questa configurazione come qualcosa docker-compose
può gestire, allora sei un passo avanti verso il passaggio a un livello di gestione più sofisticato come Kubernetes, che potrebbe essere la logica conclusione di questa particolare migrazione.