Para cargar sus archivos sql solo en la primera ejecución:
Puede utilizar el siguiente archivo de redacción
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
Tienes que colocar tu data.sql y schema.sql archivos bajo ./docker-entrypoint-initdb.d directorio usando Volumes para obtener más información
.
Los archivos SQL en esta carpeta se cargarán solo si el directorio de datos de la base de datos está vacío (la primera ejecución del servicio de la base de datos) . (es decir) en su caso ./mysql-data la carpeta debe estar vacía
Para tu segundo problema:
En lugar de usar wait-for-it.sh , puede usar healthcheck y service_healthy . Aquí usermanagement-service se iniciará una vez mysqldb ejecuta con éxito ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] en el intervalo especificado. Para obtener más detalles sobre el control de salud y depend_on, consulte aquí .
Tengo test comando desde aquí
.