Docker:从主机使用–net = host选项访问docker容器中的mysql

我正在使用–net = host选项运行2 docker容器,因此networking是透明的(docker容器使用与主机相同的networking设备)。

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 container 2在端口3308上运行mysqld

但是,使用

mysql -P 3307 -u用户-p dbname

我无法从主机访问mysql数据库。 即使我提供了在第一个docker实例中运行的mysql的端口,它总是将我指向主机上的mysql数据库。 没有iptables规则可以导致这样的行为。 closures防火墙不会改变行为。

在my.cnf中,mysql服务器绑定到0.0.0.0(127.0.0.1)也不起作用。

所以我迷路了,希望有人看到一个解决scheme。 删除–host = net选项并使用端口公开是不可行的,因为这会降低networking对容器的执行力。

编辑:忘了提及docker容器内的数据库是可以访问和按devise工作。 唯一不起作用的是来自主机 – > docker的连接,因为连接将始终指向host – > host,甚至使用docker容器中的端口。

我想这与Dockernetworking无关。 MySQL客户端只是倾向于在MySQL服务器公开的主机上使用Unix套接字。 只要提供主机IP地址给客户端, -h 127.0.0.1 ,强制它使用TCP。