Cet article fournit un exemple pour faire en sorte que docker-compose attende le conteneur Postgres ou Postgresql avant de lancer un autre conteneur d’application docker dépendant. Nous allons utiliser l’outil docker-compose-wait, qui est un petit utilitaire en ligne de commande permettant d’attendre un nombre fixe de secondes et/ou d’attendre qu’un port TCP soit ouvert sur une image cible.
Vous devez ajouter l’outil docker-compose-wait dans le Dockerfile de votre application.
Sommaire:
Démarrage rapide
# Download a template
git clone https://github.com/kassambara/docker-compose-wait-for-container.git
# Build the demo application
cd docker-compose-wait-for-container/ex01-using-wait-tool
docker-compose build
# Running your app
docker-compose run my_super_app
# Stopping containers and cleaning
docker-compose down
Etape 0 : Télécharger un modèle
# Download a template
git clone https://github.com/kassambara/docker-compose-wait-for-container.git
cd docker-compose-wait-for-container/ex02-using-wait-tool
Structure de dossier de projet:
files/docker-compose-wait-for-container/ex01-using-wait-tool
├── docker-compose.yml
└── my_super_app
├── Dockerfile
└── sayhello
Contenu essentiel du projet:
docker-compose.yml
pour gérer tous les services de conteneursmy_super_app
scripts : modèle Dockerfile pour construire votre application. Ici, cette application de démo vous demandera votre nom et vous félicitera ensuite !
Etape 1 : Ajouter l’outil docker-compose-wait au Dockerfile de votre application
Exemple de Dockerfile utilisant l’image alpine
:
FROM alpine:latest
# Add hello scripts
ADD sayhello /sayhello
RUN chmod +x /sayhello
# Add docker-compose-wait tool -------------------
ENV WAIT_VERSION 2.7.2
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
RUN chmod +x /wait
CMD ["/sayhello"]
Etape 2 : Modifiez votre fichier docker-compose.yml
version: '3.6'
services:
postgres:
image: "postgres:9.4"
hostname: postgres
ports:
- "5432:5432"
my_super_app:
build: ./my_super_app
image: "my_super_app:latest"
container_name: my_supper_app
depends_on:
- postgres
command: sh -c "/wait && /sayhello"
environment:
- WAIT_HOSTS=postgres:5432
- WAIT_HOSTS_TIMEOUT=300
- WAIT_SLEEP_INTERVAL=30
- WAIT_HOST_CONNECT_TIMEOUT=30
- La commande
sh -c “/wait && /sayhello”
lancera l’outil wait et ensuite votre application, ici /sayhello. - Pour que votre conteneur d’application Docker attende plusieurs hôtes, la variable d’environnement peut être spécifiée comme ceci par exemple
WAIT_HOSTS=postgres:5432, nginx:80
Options de configuration supplémentaires. Le comportement de l’utilitaire d’attente peut être configuré avec les variables d’environnement suivantes:
- WAIT_HOSTS : liste séparée par des virgules des paires hôte:port pour lesquelles vous voulez attendre.
- WAIT_HOSTS_TIMEOUT : nombre maximum de secondes d’attente pour que tous les hôtes soient disponibles avant l’échec. La valeur par défaut est de 30 secondes.
- WAIT_HOST_CONNECT_TIMEOUT : Le délai d’attente d’une connexion TCP unique à un hôte distant avant de tenter une nouvelle connexion. La valeur par défaut est de 5 secondes.
- WAIT_BEFORE_HOSTS : nombre de secondes à attendre (sleep) avant de commencer à vérifier la disponibilité des hôtes
- WAIT_AFTER_HOSTS : nombre de secondes à attendre (sleep) une fois que tous les hôtes sont disponibles
- WAIT_SLEEP_INTERVAL : nombre de secondes de sommeil entre deux tentatives. La valeur par défaut est 1 seconde.
Etape 3 : Créer et exécuter votre application
# Building your app
cd docker-compose-wait-for-container/ex01-using-wait-tool
docker-compose build
# Running your app
docker-compose run my_super_app
Le log de sortie de la console ressemble à ceci (exemple MySQL):
Après avoir tapé votre nom, vous verrez un message de félicitations de my_super_app
Etape 4 : Arrêt des conteneurs et nettoyage
docker-compose down
Résumé
Cet article décrit comment faire en sorte que docker compose attende Postgres ou Postgresql avec l’outil docker-compose-wait.
Version: English
No Comments