在cli中从主机到容器访问mysql

时间:2015-10-16 16:32:21

标签: mysql docker

我像这样创建了我的容器:

$ 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中我只改变了端口并且工作正常: enter image description here

但如果我有容器的IP:

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

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

$ mysql -uroot -proot -h 172.17.0.55

但是每次创建一个连接mysql的新容器时都要检查ip是一项繁琐的工作。我可以做任何设置来简化这项任务吗?

1 个答案:

答案 0 :(得分:6)

这不是Docker问题。默认情况下,mysql命令行客户端将连接到本地(Unix)套接字而不是网络套接字,即使您指定-P也是如此。

the documentation

中描述了此行为
  

在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出了--port或-P选项,也会出现

您必须传递-hlocalhost选项,或者您可以在/etc/mysql/my.cnf

中设置连接默认值