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

Yur*_*rii 8 mysql port database-connection docker

首先我运行mysql镜像:

docker run -e MYSQL_ROOT_PASSWORD=password  -d  -p 127.0.0.1:3308:3306 mysql
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it my_container_name bash
Run Code Online (Sandbox Code Playgroud)

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

mysql -uroot -ppassword
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从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)
Run Code Online (Sandbox Code Playgroud)

如果我docker-machine ip改为连接(这个ip被返回192.168.99.100),那么结果是一样的.

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

nwi*_*ler 8

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

docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql
Run Code Online (Sandbox Code Playgroud)

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

您现在应该能够使用连接到 MySQL

mysql -uroot -ppassword -h192.168.99.100 -P3308
Run Code Online (Sandbox Code Playgroud)