Lorsque vous travaillez avec un fichier de composition Docker, il peut s'avérer nécessaire d'exécuter une commande spécifique une seule fois, souvent lors de la configuration initiale d'une demande. Cette exigence se pose lorsque l'application dépend d'une base de données qui doit être initialisée, et l'initialisation ne doit avoir lieu que lors de la première exécution.
Dans ce cas, l'utilisateur a l'intention d'exécuter la commande ./my-project - configuration pour ajouter les informations nécessaires à la base de données. Pour y parvenir, il est recommandé d'incorporer un script de point d'entrée dans le conteneur.
Un script de point d'entrée fournit un mécanisme pour exécuter des commandes personnalisées avant de démarrer l'application principale. Dans le script du point d'entrée, il est possible de vérifier si la base de données a déjà été initialisée. Si une initialisation est requise, le script peut effectuer les étapes de configuration.
Cette approche garantit que la commande d'initialisation n'est exécutée qu'une seule fois, même si le conteneur est redémarré ou si le service est mis à l'échelle.
Pour implémenter cette solution, modifiez le fichier docker-compose.yml pour inclure le script suivant dans la définition du service my_project :
services: my_project: build: . volumes: - data:/app ports: - "6060:8080" depends_on: - mongo entrypoint: ["/app/entrypoint.sh"]
Dans ce cas, data est le volume contenant le code de l'application et Entrypoint.sh est le script du point d'entrée.
Créez un script Entrypoint.sh avec le contenu suivant :
#!/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
Dans ce script, mongo est le nom d'hôte du conteneur Mongo et my_project est le nom de la base de données.
Ce script vérifie si un document particulier existe dans la collection utilisateur du base de données. Si le document n'existe pas, cela indique que la base de données n'a pas été initialisée et la commande setup est exécutée. Sinon, l'application démarre normalement.
Notez que l'utilisateur a initialement utilisé un « conteneur de données uniquement » pour monter le volume de la base de données. Cependant, cette approche n'est plus nécessaire avec Docker 1.9 et versions ultérieures, qui prennent en charge les volumes nommés. Par conséquent, le conteneur mongodata peut être supprimé du fichier docker-compose.yml et le service mongo peut être modifié pour utiliser directement le volume nommé.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3