
Mein Ziel ist es, einige Befehle in meinem Dockerfile auszuführen, die einen SQL-Benutzer erstellen und ihm einige Berechtigungen erteilen. Also mache ich Folgendes:
FROM ubuntu:18.04
...
RUN apt-get install -y apache2
RUN apt-get install -y mysql-server
RUN mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
RUN mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"
Dies stürzt beim ersten MySQL-Befehl ab
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Über StackExchange habe ich jedoch herausgefunden, dass die folgende Lösung funktioniert, wenn ich die SQL-Befehle aus der Docker-Datei entferne und mich mit Docker Exec in einem laufenden Container anmelde:
service apache2 stop
service mysql stop
service mysql start
service apache2 start
mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"
Da ich möchte, dass alle Befehle im Dockerfile sind, habe ich die obige service stop/start
Lösung ausprobiert, aber sie funktioniert nicht vom Dockerfile aus, sondern nur nach der Ausführung in einem bereits laufenden Container. Ich nehme an, dass eine andere Lösung erforderlich ist.
Wie kann ich die Ausführung dieser SQL-Befehle automatisieren, ohne sie manuell mit Docker Exec ausführen zu müssen? Vielen Dank
PS: Lassen Sie mich wissen, ob die Frage besser auf eine andere Stack Exchange-Site passt.
Antwort1
Das Problem hängt damit zusammen, dass jeder RUN-Befehl in einer anderen Ebene ausgeführt wird. Die Lösung bestand darin, alle zugehörigen Befehle in eine Bash-Skriptdatei init_db.sh einzufügen und diese in der Docker-Datei auszuführen.
#!/bin/bash
service apache2 stop
service mysql stop
service mysql start
service apache2 start
mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"
ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh
Quelle:https://stackoverflow.com/questions/25920029/setting-up-mysql-and-importing-dump-within-dockerfile