(Es ist wahrscheinlich eine dumme Frage aufgrund meiner begrenzten Kenntnisse mit Docker oder der MySQL-Administration, aber da ich einen ganzen Abend mit diesem Thema verbracht habe, wage ich es, sie zu stellen.)
In einer Nussschale
Ich möchte MySQL in einem Docker-Container ausführen und von meinem Host aus eine Verbindung herstellen. Das Beste, was ich bisher erreicht habe, ist:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Mehr Details
Ich benutze folgendes Dockerfile
:
FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server
# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
&& mv temp.txt /etc/mysql/my.cnf
# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306
CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log
In dem Verzeichnis, in dem sich diese Datei befindet, kann ich das Image erfolgreich erstellen und ausführen mit:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Wenn ich das Bild anhänge, scheint es gut zu funktionieren:
# from the host
> docker exec -it <my_image_name> bash
#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...]
Allerdings habe ich vom Gastgeber nicht so viel Erfolg:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Noch mehr Details
- Ich habe gesehen, dass es eine Frage gibt, die meiner ähnelt . Es ist jedoch nicht dasselbe (und es gibt sowieso keine Antworten)
- Ich habe gesehen, dass es Bilder gibt , die MySQL gewidmet sind , aber ich hatte keinen größeren Erfolg damit
- Ich
grep -v
mag mich komisch fühlen. Zugegeben, es kann einen saubereren Weg geben, dies zu tun. Aber wenn ich mein Bild anhänge, kann ich beobachten, dass es tatsächlich wie erwartet funktioniert hat (dh: das entferntbind-address
). Und ich kann im Container sehen/var/log/mysql/error.log
:
Server-Hostname (Bindungsadresse): '0.0.0.0'; Port: 3306 - '0.0.0.0' wird in '0.0.0.0' aufgelöst; Auf IP erstellter Server-Socket: '0.0.0.0'.