sql >> Databasteknik >  >> RDS >> Mysql

Hur man init MySql Database i Docker Compose

För att ladda dina sql-filer endast vid första körningen:

Du kan använda skrivfilen nedan

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

Du måste placera din data.sql och schema.sql filer under ./docker-entrypoint-initdb.d katalog med Volumes för mer information .

SQL-filer i den här mappen kommer bara att laddas om DB:s datakatalog är tom (den allra första körningen av db-tjänsten) . (dvs.) i ditt fall ./mysql-data mappen ska vara tom

För ditt andra problem:

Istället för att använda wait-for-it.sh , kan du använda healthcheck och service_healthy . Här usermanagement-service kommer att startas en gång mysqldb kör framgångsrikt ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] i det angivna intervallet. För mer information om hälsokontroll och beroende_på, se här .

Fick test kommando från här .




  1. MySQL-frågan hängdes och var tvungen att döda processen

  2. Laravels frågebyggare JSON-väljare `fält->nyckel` orsakar syntaxfel

  3. Rätt sätt att använda NOT IN Postgres

  4. MySQL Before Delete trigger för att undvika att radera flera rader