Maison >développement back-end >Golang >Comment exécuter une commande une fois dans Docker Compose pour les processus dépendants des données ?

Comment exécuter une commande une fois dans Docker Compose pour les processus dépendants des données ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 01:19:02355parcourir

How to Run a Command Once in Docker Compose for Data-Dependent Processes?

Exécuter une commande une fois dans Docker Compose

Introduction

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.

Comprendre les conteneurs de volumes 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é.

Éviter l'exécution répétée de commandes

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

Utilisation de la gestion des volumes

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

Remarque sur le script Entrypoint

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn