web-dev-qa-db-fra.com

Comment puis-je créer une base de données mysql avec Docker compose?

J'essaie d'héberger sur docker une application qui utilise MySQL db. J'utilise docker compose. mon fichier yml ressemble à ceci:

version: '2'
volumes:
  data_sql:    
services:  
medical-mysql:
    image: mysql
    hostname: medical-mysql    
    volumes:    
     - data_sql:/dbcreation.sql
    environment:
      MYSQL_DATABASE: Medical
      MYSQL_ROOT_PASSWORD: root
      STARTUP_SQL: data_sql
    ports:
    - "3306:3306"
  medical-main:
    build: .
    ports:
     - "8080:8080"    
    depends_on:
     - medical-mysql

J'ai un dbcreation.sql qui crée le schéma db et est conservé dans le dossier yml. Lorsque j'exécute le fichier yml, il semble que le fichier ne fonctionne pas.

Qu'est-ce que j'ai raté?

17
Izhar Lotem

Placez simplement votre fichier .sql (dbcreation.sql) dans un dossier (ie./Mysql_init) et ajoutez le dossier en tant que volume comme ceci:

volumes:
  - /mysql_init:/docker-entrypoint-initdb.d

L'image MySQL exécutera tous les fichiers .sql, .sh et .sql.gz dans /docker-entrypoint-initdb.d au démarrage.

26
StumpDK

1) Créer un fichier de vidage dbcreation.sql

2) Créez import.sh fichier:

#!/usr/bin/env bash
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql

3) Créer docker-compose.yaml

database:
  image: mysql
  container_name: database.dev
  command: mysqld --user=root --verbose
  volumes:
    - ./dbcreation.sql:/tmp/dbcreation.sql
    - ./import.sh:/tmp/import.sh
  ports:
    - "3306:3306"
  environment:
    MYSQL_DATABASE: "test"
    MYSQL_USER: "test"
    MYSQL_PASSWORD: "test"
    MYSQL_ROOT_PASSWORD: "root"
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

"- ./dbcreation.sql:/tmp/dbcreation.sql" - "- local_path: path_inside_container"

4) Courir

docker-compose up
docker exec database.dev bash /tmp/import.sh
24
ashatrov