无法连接到Docker中的MySQL服务器

首先我运行mysql image:

docker run -e MYSQL_ROOT_PASSWORD=password -d -p 127.0.0.1:3308:3306 mysql 

然后我使用容器bash(其中big_golick是一个随机的,由big_golick本身分配给容器):

 docker exec -it big_golick bash 

在Bash中,我可以通过命令成功连接到MySQL服务器:

 mysql -uroot -ppassword 

但是当我尝试从Windows cmd连接到MySQL容器时:

 mysql -uroot -ppassword -h127.0.0.1 -P3308 ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (10061) 

如果我连接到192.168.99.100而不是(这个IP是由docker-machine ip返回的),那么结果是一样的。

问题是:如何正确地将我的Docker内部的MySQL端口暴露给外部Windows?

这个错误是在你原来的docker run命令的端口映射中,你只需要提供端口,而不是IP地址:

 docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql 

您可以运行docker ps -a来检查正在运行的容器中的端口映射。

您现在应该可以使用连接到MySQL

 mysql -uroot -ppassword -h192.168.99.100 -P3308 

首先,检查netstat -an以确保在Windows中打开端口。 如果是,请检查Windows防火墙以确保没有阻塞连接到端口。

我的Docker的大部分经验都在CoreOS中,所以我不太确定Windows如何处理到容器中的路由stream量。 在CoreOS中,它使用一个代理 。 如果Windows中有代理,请确保没有任何干扰。