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
.