Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment initialiser la base de données MySql dans Docker Compose

Pour charger vos fichiers SQL uniquement lors de la première exécution :

Vous pouvez utiliser le fichier de composition ci-dessous

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

Vous devez placer votre data.sql et schema.sql fichiers sous ./docker-entrypoint-initdb.d répertoire utilisant Volumes pour plus d'informations .

Les fichiers SQL de ce dossier ne seront chargés que si le répertoire de données de la base de données est vide (la toute première exécution du service de base de données) . (c'est-à-dire) dans votre cas ./mysql-data le dossier doit être vide

Pour votre deuxième problème :

Au lieu d'utiliser wait-for-it.sh , vous pouvez utiliser healthcheck et service_healthy . Ici usermanagement-service sera lancé une fois mysqldb exécute avec succès ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] dans l'intervalle spécifié. Pour plus de détails sur le bilan de santé et depend_on, consultez ici .

J'ai test commande de ici .