(C'est probablement une question stupide en raison de ma connaissance limitée de Docker ou de l'administration mysql, mais comme j'ai passé une soirée entière sur ce problème, j'ose le poser.)
En un mot
Je veux exécuter mysql dans un conteneur docker et me connecter à celui-ci depuis mon hôte. Jusqu'à présent, le meilleur que j'ai réalisé est:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Plus de détails
J'utilise ce qui suit 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
Dans le répertoire où se trouve ce fichier, je peux créer avec succès l'image et l'exécuter avec:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Lorsque je m'attache à l'image, cela semble fonctionner très bien:
# 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.
[...]
Cependant, je n'ai pas beaucoup de succès de la part de l'hôte:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Encore plus de détails
- J'ai vu qu'il y a une question qui ressemble à la mienne . Cependant, ce n'est pas pareil (et il n'a pas de réponse de toute façon)
- J'ai vu qu'il y a des images dédiées à mysql , mais je n'ai pas eu plus de succès avec elles
- Je
grep -v
peux me sentir bizarre. Certes, il existe peut-être un moyen plus propre de le faire. Mais lorsque j'attache mon image, je peux observer qu'elle a réellement fonctionné comme prévu (c'est-à-dire suppriméebind-address
). Et je peux voir dans le conteneur/var/log/mysql/error.log
:
Nom d'hôte du serveur (adresse de liaison): '0.0.0.0'; port: 3306 - '0.0.0.0' se résout en '0.0.0.0'; Socket serveur créé sur IP: '0.0.0.0'.