navicat连接docker中的mysql(10060/10061错误)
问题描述
docker pull mysql:5.7 获得所需版本的数据库镜像
docker run -itd --name XXX -p 3306:3306 -e MYSQL_ROOT_PASSWOD=123456 -d mysql:5.7 创建mysql容器XXX
docker ps 能看到XXX,说明其已正确运行了
但是navicat连接时一直报10061错误,如图:
百度一波,一般如下:
1 mysql服务没启动
mysql建立在容器中,虽然本质上来说,默认容器也是linux,但是docker ps显示有该容器即证明已经成功启动。
2 密码问题/mysql问题
docker exec -it XXX bash 进入容器
mysql -u root -p 能成功进入MySQL,即可排除
3 MySQL权限问题
需要grant远程权限什么的,尝试无果。
4 端口问题
其实如果mysql在docker容器中,而不是自己装的系统,是不会有这个问题的。当然也可以再在系统中确定一下。
问题解决
在容器中能正常运行mysql,说明mysql本身是没有问题的。
问题就在window连docker(default)这个过程,或者docker(default linux系统)到MySQL这个过程。如之前所说,后者一般不会有什么问题。
所以最大的可能是window上的navicat并没有连上docker。
首先想到是和之前的软件兼容的问题,换了电脑依然没有解决。
留意到,安装docker toolbox后ipconfig多了两个地址,如下:
在docker中netstat查看ip,显示如下:猜想window通过192.168.99.100和docker的192.168.99.1产生联系,我们连接192.168.99.100就相当于连上了docker。
尝试成功。(忽略图中细节,3308是新建的另一个容器端口)
PS:朋友在mac上直接localhost或127.0.0.1就能连接成功,加上各种帖子没有提过类似解决方案,所以导致一开始方向走错,困了两天。可能是因为系统差异,未深究,仅供参考。