我有多个MySQL服务器在不同的docker容器中运行。我无法从主机连接到任何一个。
$ mysql -h172.17.0.2 -uroot -pPASSWORD
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (60)
来自docker inspect的IP地址:
$ docker inspect local2 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
和已公开(但未Map)的端口:
$ docker inspect local2 | grep -B1 3306
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
--
"Ports": {
"3306/tcp": null,
"33060/tcp": null
Docker容器是使用以下命令创建(并重新创建)的
docker run --name local -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:8.0.21
我可以从网络上的另一个docker客户端连接:
docker run -it --network bridge --rm mysql mysql -h172.17.0.2 -uroot -pPASSWORD
另外,如果我bash到容器中,我可以在本地连接localhost。
我只是不能从主机连接。
3条答案
按热度按时间hsgswve41#
经过更多的研究,我发现在Mac上访问Docker示例而不Map端口实际上是不可能的。
https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
mac上无法直接访问容器IP,需要使用localhost进行端口转发
参见https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
:(
我很高兴在这里是错的。
iklwldmw2#
我不能在你访问容器中的服务的方式中发现任何问题。我只是怀疑服务实际上还没有准备好。
也许这会给予你一个解决问题的想法:
zu0ti5jz3#
尝试: