2017-10-13 1 views
0

Ich habe letzten Beitrag Setting up MySQL and importing dump within Dockerfile gelesen, konnte aber keine Antwort finden.Docker Mysql Problem

Was ich will ist, benutzerdefinierte mysql-Image mit erstellten Datenbank, Benutzer und einige andere Daten zu erstellen. Hier ist meine Dockerfile (vereinfacht):

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 

Bild wird gebaut und erfolgreich mydb-Datenbank wird als Ausgabe von „SHOW DATABASES“ aufgeführt. Aber wenn ich Container basierend auf diesem Bild ausführen sehe ich, dass Root-Passwort leer ist und meine Datenbank fehlt.

Wie kann ich das beheben? Vielen Dank?

Antwort

0

Sie können Init-Skripte verwenden. Es viel einfacher, dann Runing und Beenden von MySQL in der RUN-Befehl

Initialisierung eine neue Instanz

Wenn ein Behälter zum ersten Mal eine neue Datenbank mit der angegebenen Name wird gestartet wird erstellt und initialisiert mit den bereitgestellten Konfigurationsvariablen. Außerdem werden Dateien mit Erweiterungen .sh, .sql und .sql.gz ausgeführt, die in /docker-entrypoint-initdb.d zu finden sind. Dateien werden in alphabetischer Reihenfolge Reihenfolge ausgeführt. Sie können Ihre MySQL-Dienste problemlos füllen, indem Sie ein SQL-Abbild in dieses Verzeichnis kopieren und benutzerdefinierte Bilder mit bereitgestellten Daten bereitstellen. SQL-Dateien werden standardmäßig in die von der Variablen MYSQL_DATABASE angegebene Datenbank importiert.

+0

Danke, Sergey. Ich werde das versuchen. Aber wieso ist meine bei RUN erstellte Datenbank verloren gegangen? Bedeutet es, dass es nicht sinnvoll ist, datenbankbezogene Daten vor dem ersten Containerlauf zu initialisieren? – Sergey

+0

Das ist eine gute Frage. Könnten Sie mir 'Dockerfile' zeigen, wo Sie dieses Basisbild verwenden? –

+0

Sergey, ich habe den Inhalt der Docker-Datei in der Fragebeschreibung angegeben – Sergey