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é?
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.
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