在主机访问到主机到容器的MySQL

我创build了这样的容器:

$ docker run -d -p 33060:3306 myimage 

然后我尝试从主机连接到容器中的MySQL服务器:

 $ mysql -uroot -proot -P 33060 

我得到这个错误:

 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

这很奇怪,因为在Navicat只有我改变了港口,工作正常: 在这里输入图像说明

但是,如果我有容器的IP:

 $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' mycontainer 172.17.0.55 

然后我可以成功连接到mysql服务器:

 $ mysql -uroot -proot -h 172.17.0.55 

但是每次创build一个连接到mysql的新容器时,都需要检查ip是一个单调乏味的任务。 有任何设置,我可以做这个任务更简单?

这不是一个Docker问题。 默认情况下,即使指定了-Pmysql命令行客户端也将连接到本地(Unix)套接字而不是networking套接字。

文档中描述了这种行为:

在Unix上,MySQL程序专门处理主机名localhost,与其他基于networking的程序相比,这种方式可能与您期望的不同。 对于连接到本地主机,MySQL程序试图通过使用Unix套接字文件连接到本地服务器。 即使给出了–port或-P选项,也会发生这种情况

您必须通过-hlocalhost选项,或者您可以在-hlocalhost中设置连接默认值