2017-06-02 54 views
2

我使用下面的命令创建一个test_mysql本地主机连接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 -uroot -p123 -h 172.17.0.2 -P 3306 

引发错误连接到MySQL服务器上我的地方:

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知识产权的作品?

回答

1

1)虽然localhost 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 page

2更详细)为什么我不能连接到容器使用泊坞窗检查结果

看来你的容器连接到默认桥接网络(docker0可能有IP:172.17.0.1在你的情况下),这通常是在你安装Docker时默认创建的。 您可以在Docker network page中找到更多详细信息。因此,在您的容器中,您可以“看到”桥(可以尝试使用ping命令),但是从本地主机可能不知道如何查找/解析172.17。 0.2,你得到那个错误。