我使用以下命令创建了一个test_mysql
:
docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql
我使用docker检查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检查
结果连接到容器,而localhost
IP工作?
最佳答案
1) 当本地主机 IP 有效时? 让我们再次看看启动容器的命令:
docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql
-p 3306:3306
会将主机的 3306 端口“绑定(bind)”到容器的 3306 端口。结果,我们可以看到,如果有任何连接到达端口 3306,它们将被转发到容器的端口。
因此,您在本地 IP 上的连接将正常工作:
mysql -uroot -p123 -h 127.0.0.1 -P 3306
查看更多详细信息Docker page
2)为什么我无法使用docker检查结果连接到容器
您的容器似乎已连接到默认桥接网络(在您的情况下,docker0 可能有 IP:172.17.0.1 ),该网络通常是在您安装 Docker 时默认创建的。 您可以在Docker network page中找到更多详细信息因此,在您的容器内,您可能会“看到”网桥(您可以尝试使用 ping 命令”,但从您的本地主机,它可能不知道如何查找/解析 172.17.0.2,并且您会收到该错误。
关于mysql - 本地主机连接 MySQL Docker 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319631/