Mysql
 sql >> Database >  >> RDS >> Mysql

Come avviare il database MySql in Docker Compose

Per caricare i tuoi file sql solo alla prima esecuzione:

Puoi utilizzare il seguente file di composizione

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

Devi inserire il tuo data.sql e schema.sql file in ./docker-entrypoint-initdb.d directory utilizzando Volumes per maggiori informazioni .

I file SQL in questa cartella verranno caricati solo se la directory dei dati del DB è vuota (la prima esecuzione del servizio db) . (cioè) nel tuo caso ./mysql-data la cartella dovrebbe essere vuota

Per il tuo secondo problema:

Invece di usare wait-for-it.sh , puoi utilizzare healthcheck e service_healthy . Qui usermanagement-service verrà avviato una volta mysqldb esegue correttamente ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] nell'intervallo specificato. Per maggiori dettagli su healthcheck e depend_on, fare riferimento qui .

Hai test comando da qui .