Podle oficiální dokumentace:
Může být pouze jeden
CMD
instrukce v Dockerfile . Pokud uvedete více než jedenCMD
pak pouze posledníchCMD
vstoupí v platnost.
A váš Dockerfile má dva příkazy CMD, takže příkaz php-fpm
přepíše
/usr/bin/supervisord
Takže můžete spouštět příkazy PHP, ale nemůžete najít soket správce vytvořený v kontejneru.
Problém můžete vyřešit odstraněním posledních CMD
příkaz související s PHP-FPM
jak jste již nakonfigurovali dozorce pro jeho spuštění a váš Dockerfile by měl mít jeden CMD
příkaz:
CMD ["/usr/bin/supervisord"]
Myšlenkou je odstranit supervizora a místo toho spustit vše, co supervizor spouštěl v několika různých kontejnerech. Můžete to snadno zorganizovat pomocí docker-compose
, například všechny běží na stejném kontejneru s různými CMD
přepíše nebo stejný kontejner s jiným CMD
vrstva na konci, aby se rozdělila. Problém je v tom, že supervizor nebude schopen sdělit stav procesů, které spravuje, Dockeru. Vždy bude „živý“, i když všechny jeho procesy budou zcela zničeny. Přímé vystavení znamená, že uvidíte, že havarovaly.
Nejlepší je rozdělit každou z těchto služeb do samostatných kontejnerů. Vzhledem k tomu, že existují oficiální předpřipravené pro MySQL a tak dále, není opravdu žádný důvod, abyste si je sestavovali sami. Co chcete udělat, je přeložit to supervisord
config na docker-compose
formát.
Se samostatnými kontejnery můžete dělat věci jako docker ps
abyste zjistili, zda vaše služby fungují správně, budou všechny uvedeny jednotlivě. Pokud potřebujete upgradovat jeden, můžete to udělat snadno, stačí pracovat s tímto jedním kontejnerem, místo abyste museli sundávat celou věc.
Způsob, jakým na něj zde útočíte, zachází s Dockerem jako s luxusním virtuálním počítačem, což ve skutečnosti není. Místo toho je to správce procesů , kde tyto procesy náhodou mají předem vytvořené obrazy disků a kolem nich vrstvu zabezpečení.
Sestavte své prostředí z jednoprocesových kontejnerů a váš život bude mnohem jednodušší jak z hlediska údržby, tak z hlediska monitorování.
Pokud můžete tuto konfiguraci vyjádřit jako něco docker-compose
můžete zvládnout, pak jste o krok blíže k přechodu na sofistikovanější vrstvu správy, jako je Kubernetes, což může být logickým závěrem této konkrétní migrace.