Forcer Docker Compose à Attendre que les Dépendances soient Prêtes

Docker Compose: Attendre que le Conteneur Postgres soit Prêt

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 conteneurs
  • my_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):

Logs de l’attente de docker compose

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

Docker Compose: Attendre que MongoDB soit Prêt (Prev Lesson)
(Next Lesson) Docker Compose: Attendre que le Conteneur Redis soit Prêt
Back to Forcer Docker Compose à Attendre que les Dépendances soient Prêtes

No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments