Pour charger vos fichiers SQL uniquement lors de la première exécution :
Vous pouvez utiliser le fichier de composition ci-dessous
version: '2.1'
services:
usermanagement-service:
build: ./UserManagementService
restart: on-failure
ports:
- "7778:7778"
depends_on:
mysqldb:
condition: service_healthy
mysqldb:
image: mysql
volumes:
- ./mysql-data:/var/lib/mysql
- ./mysql-init-files:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: userdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testuser
ports:
- "3600:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
Vous devez placer votre data.sql
et schema.sql
fichiers sous ./docker-entrypoint-initdb.d
répertoire utilisant Volumes
pour plus d'informations
.
Les fichiers SQL de ce dossier ne seront chargés que si le répertoire de données de la base de données est vide (la toute première exécution du service de base de données) . (c'est-à-dire) dans votre cas ./mysql-data
le dossier doit être vide
Pour votre deuxième problème :
Au lieu d'utiliser wait-for-it.sh
, vous pouvez utiliser healthcheck
et service_healthy
. Ici usermanagement-service
sera lancé une fois mysqldb
exécute avec succès ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
dans l'intervalle spécifié. Pour plus de détails sur le bilan de santé et depend_on, consultez ici .
J'ai test
commande de ici
.