Heim  >  Artikel  >  Backend-Entwicklung  >  Wie führe ich einen einmaligen Befehl in Docker Compose aus?

Wie führe ich einen einmaligen Befehl in Docker Compose aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 05:20:03392Durchsuche

How to Execute a One-Time Command in Docker Compose?

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 verwalten. zum Entfernen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn