我像这样创建了我的容器:
$ 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)
但如果我有容器的IP:
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' mycontainer
172.17.0.55
然后我可以成功连接到mysql服务器:
$ mysql -uroot -proot -h 172.17.0.55
但是每次创建一个连接mysql的新容器时都要检查ip是一项繁琐的工作。我可以做任何设置来简化这项任务吗?
答案 0 :(得分:6)
这不是Docker问题。默认情况下,mysql
命令行客户端将连接到本地(Unix)套接字而不是网络套接字,即使您指定-P
也是如此。
在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出了--port或-P选项,也会出现
您必须传递-hlocalhost
选项,或者您可以在/etc/mysql/my.cnf