Heim > Backend-Entwicklung > Golang > Wie führe ich einen Befehl in Docker Compose nur einmal aus?

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

Mary-Kate Olsen
Freigeben: 2024-11-09 13:25:02
Original
297 Leute haben es durchsucht

How to Run a Command Only Once in Docker Compose?

Einen Befehl einmal in Docker Compose ausführen

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.

Einstiegspunktskript

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.

Datei „docker-compose.yml“

Um diese Lösung zu implementieren, ändern Sie die Datei „docker-compose.yml“, um das folgende Skript in den Dienst „my_project“ aufzunehmen Definition:

services:
  my_project:
    build: .
    volumes:
      - data:/app
    ports:
      - "6060:8080"
    depends_on:
      - mongo
    entrypoint: ["/app/entrypoint.sh"]
Nach dem Login kopieren

In diesem Fall sind Daten das Volume, das den Anwendungscode enthält, und enterpoint.sh ist das Entrypoint-Skript.

entrypoint.sh-Skript

Erstellen 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
Nach dem Login kopieren

In diesem Skript ist „mongo“ der Hostname des Mongo-Containers und my_project ist der Datenbankname.

Dieses Skript prüft, ob ein bestimmtes Dokument in der Benutzersammlung der Datenbank vorhanden ist. 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.

Entfernen des „Nur-Daten-Containers“

Beachten Sie, dass der Benutzer ursprünglich einen „Nur-Daten-Container“ verwendet hat, um das Datenbank-Volume bereitzustellen. Mit Docker 1.9 und höher, das benannte Volumes unterstützt, ist dieser Ansatz jedoch nicht mehr erforderlich. 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.

Das obige ist der detaillierte Inhalt vonWie führe ich einen Befehl in Docker Compose nur einmal aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage