Para carregar seus arquivos sql apenas na primeira execução:
Você pode usar o arquivo de composição abaixo
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
Você tem que colocar seu
data.sql
e schema.sql
arquivos em ./docker-entrypoint-initdb.d
diretório usando Volumes
para mais informações
. Os arquivos SQL nesta pasta serão carregados somente se o diretório de dados do DB estiver vazio (a primeira execução do serviço db) . (ou seja) no seu caso
./mysql-data
a pasta deve estar vazia Para seu segundo problema:
Em vez de usar
wait-for-it.sh
, você pode usar healthcheck
e service_healthy
. Aqui usermanagement-service
será iniciado uma vez mysqldb
executa com sucesso ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
no intervalo especificado. Para obter mais detalhes sobre a verificação de integridade e o Depends_on, consulte aqui . Obteve
test
comando aqui
.