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

Cannot connect to MySQL server inside Docker

首先我运行mysql图片:

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

然后我用容器bash:

docker exec -it my_container_name 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 外部?

首先,检查 netstat -an 以确保端口在 Windows 中打开。如果是,还要检查 Windows 防火墙以确保没有任何东西阻止到端口的连接。

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

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

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

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

您现在应该可以使用

连接到 MySQL
mysql -uroot -ppassword -h192.168.99.100 -P3308

更改我用来 运行 镜像的端口有效。 我检查了这个端口是否被其他东西使用,但没有使用。所以我只是 - 绝望地 - 运行 在不同端口“3309”中的一个新容器。而且效果很好!

确保您已使用-P 输入端口。