本地主机连接MySQL Docker混淆

我使用以下命令创build了一个test_mysql

 docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql 

我使用docker inspect test_mysql的IP地址。 IP是172.17.0.2

奇怪的是,当我试图连接到我的本地使用MySQL服务器

 mysql -uroot -p123 -h 172.17.0.2 -P 3306 

提出的一个错误:

 ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (51) 

但是,如果我使用本地主机IP地址,它确实工作:

 mysql -uroot -p123 -h 127.0.0.1 -P 3306 

我的问题是为什么我不能连接到容器使用docker inspect结果,而localhost IP工作?

1)本地主机IP工作? 让我们再看看你的命令启动容器:

 docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql 

-p 3306:3306将把主机的端口3306“绑定”到容器的端口3306。 因此,我们可以看到,如果有任何连接到端口3306,它们将被转发到容器的端口。 所以,你在本地IP上的连接将起作用:

 mysql -uroot -p123 -h 127.0.0.1 -P 3306 

在Docker页面上查看更多细节

2)为什么我无法连接到容器使用docker检查结果

看起来你的容器连接到了默认桥接networking(docker0可能有你的IP:172.17.0.1),这通常是在安装Docker时默认创build的。 您可以在Docker网页中find更多详细信息。因此,在您的容器中,您可能会“看到”桥(您可以尝试使用ping命令),但是从本地主机可能不知道如何查找/parsing172.17 .0.2,你有这个错误。