Beim Arbeiten mit einer Docker-Compose-Datei kann es erforderlich sein, einen bestimmten Befehl nur einmal auszuführen, häufig während der Ersteinrichtung einer Bewerbung. Diese Anforderung entsteht, wenn die Anwendung von einer Datenbank abhängt, die initialisiert werden muss, und die Initialisierung nur beim ersten Start erfolgen soll.
In diesem Fall beabsichtigt der Benutzer, den Befehl ./my-project - auszuführen. Setup, um die erforderlichen Informationen zur Datenbank hinzuzufügen. Um dies zu erreichen, wird empfohlen, ein Einstiegspunktskript in den Container zu integrieren.
Ein Einstiegspunktskript bietet einen Mechanismus zum Ausführen benutzerdefinierter Befehle vor dem Start der Hauptanwendung. Innerhalb des Entrypoint-Skripts ist es möglich zu überprüfen, ob die Datenbank bereits initialisiert wurde. Wenn eine Initialisierung erforderlich ist, kann das Skript die Einrichtungsschritte ausführen.
Dieser Ansatz stellt sicher, dass der Initialisierungsbefehl nur einmal ausgeführt wird, selbst wenn der Container neu gestartet oder der Dienst hochskaliert wird.
Um diese Lösung zu implementieren, ändern Sie die Datei „docker-compose.yml“, um das folgende Skript in die Dienstdefinition „my_project“ aufzunehmen:
services: my_project: build: . volumes: - data:/app ports: - "6060:8080" depends_on: - mongo entrypoint: ["/app/entrypoint.sh"]
In diesem Fall sind Daten das Volume, das den Anwendungscode enthält, und Eintragspunkt.sh ist das Einstiegspunkt-Skript.
Erstellen Sie ein Skript „entrypoint.sh“ mit folgendem Inhalt:
#!/bin/bash # Check if database is initialized. mongo mongo://admin:admin@mongo:27017/my_project --eval "db.user.findOne()" > /dev/null 2>&1 # If the database is not initialized, perform setup. if [ $? -ne 0 ]; then /app/my_project -setup fi # Start the application. /app/my_project
In diesem Skript ist mongo der Hostname des Mongo-Containers und my_project der Datenbankname.
Dieses Skript prüft, ob ein bestimmtes Dokument in der Benutzersammlung des vorhanden ist Datenbank. Wenn das Dokument nicht vorhanden ist, bedeutet dies, dass die Datenbank nicht initialisiert wurde und der Setup-Befehl ausgeführt wird. Andernfalls startet die Anwendung normal.
Beachten Sie, dass der Benutzer ursprünglich einen „Nur-Daten-Container“ verwendet hat, um das Datenbank-Volume bereitzustellen. Dieser Ansatz ist jedoch ab Docker 1.9 nicht mehr erforderlich, da benannte Volumes unterstützt werden. Daher kann der Mongodata-Container aus der Datei docker-compose.yml entfernt und der Mongo-Dienst so geändert werden, dass er das benannte Volume direkt verwendet.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3