本地主机连接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,你有这个错误。