Erstens gibt es ein Problem in Ihrem Dockerfile:
RUN service mysql restart && /tmp/setup.sh
Docker-Images speichern keine laufenden Prozesse. Daher wird Ihr RUNBefehl nur während der docker buildPhase ausgeführt und nach Abschluss des Builds gestoppt. Stattdessen müssen Sie den Befehl geben , wenn der Container gestartet wird die Verwendung CMDoder ENTRYPOINTBefehle wie folgt:
CMD mysql start
Zweitens benötigt der Docker-Container einen Prozess (letzter Befehl), um weiter ausgeführt zu werden, andernfalls wird der Container beendet / gestoppt. Daher kann der normale service mysql startBefehl nicht direkt in der Docker-Datei verwendet werden.
Lösung
Es gibt drei typische Möglichkeiten, um den Prozess am Laufen zu halten:
Dies wird häufig bevorzugt, wenn ein einzelner Dienst ausgeführt wird, da das ausgegebene Protokoll für Docker zugänglich ist.
Dies funktioniert nur, wenn es ein Skript wie gibt mysqld_safe.
Dies ist am besten, wenn der Befehl eine Reihe von Schritten ausführen muss und erneut ausgeführt werden /start.shsoll.
Hinweis
Für Anfänger wird die Verwendung supervisordnicht empfohlen. Ehrlich gesagt ist es übertrieben. Es ist viel besser, einen einzelnen Dienst / einen einzelnen Befehl für den Container zu verwenden.
Übrigens: Bitte überprüfen Sie https://registry.hub.docker.com auf vorhandene MySQL-Docker-Bilder als Referenz