Docker Composer import mysql .sql
Je vais avoir des difficultés à importer une .sql fichier de vidage avec docker-composer. J'ai suivi les docs, qui, apparemment, va charger le .fichier sql à partir de docker-point d'entrée-initdb.d. Cependant, lorsque je lance docker-compose up
, le fichier sql n'est pas copié sur le conteneur.
J'ai essayé d'arrêter le conteneurs avec -vf
drapeau, mais cela ne fonctionne pas non plus. Suis-je en train de faire quelque chose de mal dans mon .yml script?
J'ai un dump.sql dans le répertoire de la base de données db-dump/à la racine d'où mon composent fichier.
frontend:
image: myimage
ports:
- "80:80"
links:
- mysql
mysql:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_USER: dbuser
MYSQL_PASSWORD: userpass
MYSQL_DATABASE: myimage_db
volumes:
- ./database/db-dump:/docker-entrypoint-initdb.d
- Votre menu fixe-composer fonctionne sur ma machine. Joindre veuillez dir structure de votre emplacement de vidage sur l'hôte, et comment vous vous vérifier ce fichier a été copié dans le récipient.
- La dir structure de base de données "> db-dump > dump.sql" une fois que la composition est une connecter à la base de conteneur et vérifier le docker-point d'entrée-initdb.d dir qui est toujours vide
Vous devez vous connecter pour publier un commentaire.
Après de nombreuses tentatives avec les volumes de réglage j'ai trouvé une solution de contournement
J'ai créé une autre image basée sur mysql avec le suivant dans le Dockerfile
Ensuite retiré les volumes de composer et a couru la nouvelle image
De cette façon, l'image est toujours copié et exécuter au démarrage
Cela apparaît sur la page de documentation du Docker MySQL image: https://hub.docker.com/_/mysql/
Cela a fonctionné pour moi,
sauvegarde mysql doit être un répertoire. Tous les .sql dans le répertoire sera importé.
De base de données Mysql dump schéma.sql est réside dans le /mysql dump/schéma.sql répertoire et il crée les tables pendant le processus d'initialisation.
docker-composer.yml:
J'ai eu un problème similaire avec mysql où je voudrais monter un répertoire local dans /configs/mysql/data contenant un mydatabasedump.fichier sql via docker-composer le menu fixe-point d'entrée-initdb.d volume,
le fichier chargé sur le conteneur, mais de ne pas exécuter ou de remplir la base de données lorsque le conteneur initialisé. Mon intial docker-composer.yml looke comme ceci:
J'ai trouvé deux solutions à ce problème:
Le premier est venu après que j'ai enregistré dans l'exécution de conteneur et a confirmé que mydatabasedump.sq fichier était présent et exécutable dans le conteneur docker-point d'entrée-initdb.d: répertoire; j'ai créé et a ajouté
un script bash pour mon local /configs/mysql/data répertoire appelé dump.sh que exécutée après que le conteneur a été initialisé. Il contient un unique de commande de mysql que des copies my_database_dump.sql pour my_app_database.
Le script bash ressemble à ceci
J'ai exécuté ce script via mon Dockerfile dans le point d'entrée de la directive comme ceci:
Après la réalisation de l'émission initiale était due à l'volumes mouted après la cotainer est construit et n'a donc pas intilizing la base de données avec le fichier de vidage (ou de l'exécution de tous les scripts dans le répertoire) au moment du démarrage, la deuxième solution était tout simplement de
déplacer les volumes de la directive dans mon message-fichier au-dessus de la construit la directive. Cela a fonctionné et m'a permis de supprimer l'dump.sh sac et la DOCKERENTRY directive dans mon Dockerfile.
La modification de docker-composer.yml ressemble à ceci