(Probabilmente è una domanda stupida a causa della mia conoscenza limitata con Docker o amministrazione mysql, ma dato che ho passato un'intera serata su questo problema, ho il coraggio di chiederlo.)
In poche parole
Voglio eseguire mysql in un container Docker e connettermi ad esso dal mio host. Finora, il meglio che ho ottenuto è:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Più dettagli
Sto usando quanto segue 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
Nella directory in cui si trova questo file, posso costruire con successo l'immagine ed eseguirla con:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Quando allego all'immagine, sembra che funzioni bene:
# 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.
[...]
Tuttavia non ho molto successo dall'host:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Ancora più dettagli
- Ho visto che c'è una domanda che somiglia alla mia . Tuttavia, non è lo stesso (e comunque non ha risposte)
- Ho visto che ci sono immagini dedicate a mysql , ma non ho avuto più successo con esse
- Il mio
grep -v
può sembrare strano. Certo, potrebbe esserci un modo più pulito per farlo. Ma quando allego la mia immagine, posso osservare che ha effettivamente funzionato come previsto (ad esempio: rimosso ilbind-address
). E posso vedere nel contenitore/var/log/mysql/error.log
:
Nome host del server (indirizzo di associazione): "0.0.0.0"; porta: 3306 - "0.0.0.0" viene risolto in "0.0.0.0"; Socket del server creato su IP: "0.0.0.0".