Erstens gibt es ein Problem in Ihrem Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Docker-Images speichern keine laufenden Prozesse. Daher wird Ihr RUN
Befehl nur während der docker build
Phase ausgeführt und nach Abschluss des Builds gestoppt. Stattdessen müssen Sie den Befehl geben , wenn der Container gestartet wird die Verwendung CMD
oder ENTRYPOINT
Befehle 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 start
Befehl 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.sh
soll.
Hinweis
Für Anfänger wird die Verwendung supervisord
nicht 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