Maison >développement back-end >Golang >Comment exécuter une commande une fois dans Docker Compose pour les processus dépendants des données ?
Docker compose vous permet de gérer plusieurs conteneurs comme une seule unité. Cependant, il peut être difficile d'exécuter des commandes une seule fois, en particulier lorsqu'il s'agit de processus dépendants des données, comme la configuration de bases de données.
Dans votre fichier de composition, vous avez créé un conteneur de volume de données "mongodata" pour stocker les données MongoDB. Ce conteneur est essentiellement un conteneur en pause qui monte simplement le volume attribué.
Script de point d'entrée pour une initialisation unique :
Pour empêcher la commande "-setup" de s'exécuter plusieurs fois, vous pouvez utiliser un script de point d'entrée dans le conteneur "my_project". Ce script vérifiera si la base de données a été initialisée et effectuera la configuration uniquement si nécessaire.
Exemple :
#!/bin/sh # Check if database is initialized if test -f /app/initialized; then # Database already initialized, skip setup echo "Database already initialized" else # Initialize database ./my-project -setup touch /app/initialized fi # Start the application exec /go/bin/my_project
Docker 1.9 et versions ultérieures offrent des fonctionnalités natives de gestion des volumes, éliminant ainsi le besoin de conteneurs « données uniquement ». Vous pouvez simplifier votre fichier de composition comme suit :
services: mongo: image: mongo:latest volumes: - mongodata:/data/db ports: - "28001:27017" command: --smallfiles --rest --auth
Dans le script Entrypoint, il est essentiel de gérer les retards potentiels dans la disponibilité de la base de données. Le script doit réessayer les tentatives de connexion si la base de données n'est pas encore accessible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!