Per caricare i tuoi file sql solo alla prima esecuzione:
Puoi utilizzare il seguente file di composizione
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
Devi inserire il tuo data.sql
e schema.sql
file in ./docker-entrypoint-initdb.d
directory utilizzando Volumes
per maggiori informazioni
.
I file SQL in questa cartella verranno caricati solo se la directory dei dati del DB è vuota (la prima esecuzione del servizio db) . (cioè) nel tuo caso ./mysql-data
la cartella dovrebbe essere vuota
Per il tuo secondo problema:
Invece di usare wait-for-it.sh
, puoi utilizzare healthcheck
e service_healthy
. Qui usermanagement-service
verrà avviato una volta mysqldb
esegue correttamente ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
nell'intervallo specificato. Per maggiori dettagli su healthcheck e depend_on, fare riferimento qui .
Hai test
comando da qui
.