Docker主机网络驱动程序在Mac和Linux上具有不同的行为

问题描述 投票:0回答:1

在Mac OS上,当运行将主机指定为网络驱动程序的nginx容器,然后在MAC OS主机上执行curl命令时,我无法访问主机端口80上公开的服务。另一方面,从另一个使用主机作为网络驱动程序的容器执行curl命令时,我也可以访问主机端口80上公开的Nginx服务:

MACHOST:~ user$ docker run -d --network host --name custom-nginx nginx
1157db8de59a5d6c1f16195bd31a395c171b3ce864cd85542b47620ba87efe05
MACHOST:~ user$ curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
000
MACHOST:~ user$ docker run --rm --network host curlimages/curl curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200

我确信预期的行为是在debian主机上执行相同命令场景时得到的下一个行为:

cloud_user@debian-instance-2:~$ docker run -d --network host --name custom-nginx nginx
905c905533f8ff8fcab45db05ec1e04545b3357e6ee463f7855da146ccee155f
cloud_user@debian-instance-2:~$ curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200
cloud_user@debian-instance-2:~$ docker run --rm --network host curlimages/curl curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200

关于发生了什么的任何提示吗?

docker networking containers driver host
1个回答
0
投票

Mac上的Docker桌面在虚拟OS上运行docker守护程序。[参考:https://docs.docker.com/docker-for-mac/docker-toolbox/]

[执行docker run --network host ...时,它将附加到作为VM而不是MACHOST(物理机器)的主机上的端口。因此,基于容器custom-nginx从基于curlimages / curl图像的容器中可见,因为它们两个都在同一虚拟主机(VM)上运行。 [参考:https://github.com/docker/for-mac/issues/2716]

© www.soinside.com 2019 - 2024. All rights reserved.