Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So initialisieren Sie die MySql-Datenbank in Docker Compose

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 .