Um Ihre SQL-Dateien nur beim ersten Lauf zu laden:
Sie können die folgende Compose-Datei verwenden
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
Sie müssen Ihre data.sql
platzieren und schema.sql
Dateien unter ./docker-entrypoint-initdb.d
Verzeichnis mit Volumes
für weitere Informationen
.
SQL-Dateien in diesem Ordner werden nur geladen, wenn das Datenverzeichnis der DB leer ist (der allererste Lauf des db-Dienstes) . (dh) in Ihrem Fall ./mysql-data
Ordner sollte leer sein
Für Ihr zweites Problem:
Anstatt wait-for-it.sh
zu verwenden , können Sie healthcheck
verwenden und service_healthy
. Hier usermanagement-service
wird einmal gestartet mysqldb
führt erfolgreich ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
aus im angegebenen Intervall. Weitere Einzelheiten zu Healthcheck und dependent_on finden Sie hier .
test
erhalten Befehl von hier
.