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í
.