Ausführen eines einmaligen Befehls in Docker Compose
Im Kontext von Docker Compose suchen Sie nach einer Lösung, um einen bestimmten Befehl auszuführen ( ./my-project -setup) nur einmal, unabhängig von Container-Neustarts oder -Bereitstellungen. Dieser Bedarf entsteht in Situationen, in denen eine Initialisierung oder Dateneinrichtung erforderlich ist.
Um dieses Problem zu beheben, sollten Sie die Implementierung eines Einstiegspunktskripts in Ihrem Container in Betracht ziehen. Dieses Skript übernimmt die Aufgabe, zu prüfen, ob die Datenbank bereits initialisiert wurde. Ist dies nicht der Fall, führt das Skript die erforderlichen Initialisierungsschritte aus.
Es ist wichtig zu beachten, dass die Startreihenfolge des Containers nicht garantiert ist, sodass es möglich ist, dass der Anwendungscontainer vor dem Datenbankcontainer startet. Um dies zu berücksichtigen, sollte das Skript eine Logik für den Umgang mit solchen Vorkommnissen enthalten.
Ein Beispiel für diesen Ansatz finden Sie im offiziellen WordPress-Image (https://github.com/docker-library/wordpress/blob/df190dc9c5752fd09317d836bd2bdcd09ee379a5/apache/docker-entrypoint.sh#L146-L171). Das Skript versucht, eine Verbindung zur Datenbank herzustellen und prüft, ob eine Initialisierung erforderlich ist, und versucht es erneut, wenn auf die Datenbank noch nicht zugegriffen werden kann.
Volume-Management optimieren
In Ihrem anfänglichen Docker-Compose Datei haben Sie einen „Nur-Daten“-Container zum Anhängen Ihres Volumes verwendet. Moderne Versionen von Docker (1.9 und höher) bieten jedoch Funktionen zur Volumenverwaltung. Dadurch entfällt die Notwendigkeit separater Nur-Daten-Container.
Sie können Ihre Docker-Compose-Datei vereinfachen, indem Sie den Nur-Daten-Container entfernen und den Mongo-Dienst wie folgt ändern:
mongo: image: mongo:latest volumes: - mongodata:/data/db ports: - "28001:27017" command: --smallfiles --rest --auth
Diese Konfiguration erstellt ein Volume mit dem Namen mongodata, falls es noch nicht vorhanden ist, oder verwendet ein vorhandenes Volume mit diesem Namen wieder. Sie können Volumes mit den Befehlen docker volume ls zum Auflisten und docker volume rm
Das obige ist der detaillierte Inhalt vonWie führe ich einen einmaligen Befehl in Docker Compose aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!