我正在运行两个带有--net=host选项的Docker容器,因此网络是透明的(Docker容器使用与主机相同的网络设备)。
docker network inspect host
[
{
"Name": "host",
"Id": "32ddf8f58d520e49a0b3f296d6d03134b24d7c503309e1c35e04c248010aa64b",
"Scope": "local",
"Driver": "host",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Containers": {
"0e41eb0b07d2751db99a204a3a69a2446bf5b869150bc5741df670e56dbce670": {
"Name": "sleepy_goldstine",
"EndpointID": "cc8f2c4da055ae7e608c127552f67753c319aeb603234c418a0ebe8958c1025a",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
},
"71de826121e7222020eec8be8b3a737f3297f8c3aa99d21f0f7016d6aca6f668": {
"Name": "tender_goodall",
"EndpointID": "2da0468dbaf1e6b877984cbeb6b2a775786259fec7e83eb373c1d25fe715e16f",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
"Options": {}
}
]
我可以从外部访问docker容器中的多个服务。然而,有一件事情不起作用,我开始尝试解决问题...在docker主机上,有一个运行在3306端口上的mysql数据库,没有问题。Docker容器1也运行在3307端口上的mysqld,Docker容器2运行在3308端口上的mysqld。但是,使用"mysql -P 3307 -u user -p dbname"命令时,我无法从主机访问mysql数据库。即使我提供了在第一个docker实例中运行的mysql端口,它始终将我重定向到主机上的mysql数据库。没有任何iptables规则可以导致这种行为。关闭防火墙也无法改变这种行为。在my.cnf中,mysql服务器绑定到0.0.0.0(127.0.0.1)也不起作用。所以我迷失了方向,希望有人能找到解决方法。删除--host=net选项并使用端口暴露不是一个选择,因为这会降低容器之间的网络性能。编辑:忘记提到docker容器内的数据库可访问且按设计工作。唯一不起作用的是主机->docker的连接,因为连接总是被重定向到主机->主机,即使使用docker容器的端口也是如此。
localhost
,它将无法正常工作。这里有一个关于如何配置MySQL客户端以更符合预期方式操作的问题。这里还有一个相关的MySQL bug。 - saaj