2017-10-13 1 views
0

J'ai lu le post récent Setting up MySQL and importing dump within Dockerfile mais je n'ai pas trouvé de réponse. Ce que je veux est de construire l'image mysql personnalisée avec la base de données créée, les utilisateurs et quelques autres données. Voici mon Dockerfile (simplifié):Docker mysql question

FROM mysql:5.7 

    ENV MYSQL_ROOT_PASSWORD=root 

    RUN service mysql start && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "CREATE DATABASE mydb;" && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "SHOW databases;" && \ 
     service mysql stop 

ENTRYPOINT service mysql start && /bin/sh 

image est construit avec succès et base de données mydb est répertorié comme sortie de "SHOW DATABASES". Mais lorsque j'exécute un conteneur basé sur cette image, je vois que le mot de passe root est vide et que la base de données mydb est manquante.

Comment puis-je résoudre ce problème? Merci?

Répondre

0

Vous pouvez utiliser des scripts init. Beaucoup plus facile puis Marchepied et arrêter MySQL en commande RUN

Initialiser une nouvelle instance

Lorsqu'un conteneur est démarré pour la première fois, une nouvelle base de données avec le nom spécifié sera créé et initialisé avec les variables de configuration fournies. En outre, il exécutera des fichiers avec extensions .sh, .sql et .sql.gz qui se trouvent dans /docker-entrypoint-initdb.d. Les fichiers seront exécutés dans l'ordre alphabétique . Vous pouvez facilement remplir vos services mysql en montant un vidage SQL dans ce répertoire et fournir des images personnalisées avec les données . Les fichiers SQL seront importés par défaut dans la base de données spécifiée par la variable MYSQL_DATABASE.

+0

Merci, Sergey. Je vais essayer ça. Mais pourquoi ma base de données créée à l'instruction RUN a été perdue? Cela signifie-t-il qu'il n'est pas logique d'initialiser les données relatives à la base de données avant l'exécution du premier conteneur? – Sergey

+0

C'est une bonne question. Pourriez-vous me montrer 'Dockerfile' où vous utilisez cette image de base? –

+0

Sergey, j'ai spécifié le contenu du fichier Docker dans la description de la question – Sergey