Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 尽管有iptables,我还是可以访问谷歌云上的80端口——为什么?_Docker_Google Cloud Platform_Google Compute Engine_Iptables - Fatal编程技术网

Docker 尽管有iptables,我还是可以访问谷歌云上的80端口——为什么?

Docker 尽管有iptables,我还是可以访问谷歌云上的80端口——为什么?,docker,google-cloud-platform,google-compute-engine,iptables,Docker,Google Cloud Platform,Google Compute Engine,Iptables,我正在运行google云容器实例(cos-beta-70-11021-29-0)和nginx: docker run——名称xx-d-p80:80nginx 尽管端口80未在iptables中打开,我仍可以访问nginx欢迎页面: $ sudo iptables -S -P INPUT DROP -P FORWARD DROP -P OUTPUT DROP -N DOCKER -N DOCKER-ISOLATION-STAGE-1 -N DOCKER-ISOLATION-STAGE-2 -N D

我正在运行google云容器实例(cos-beta-70-11021-29-0)和nginx:

docker run——名称xx-d-p80:80nginx

尽管端口80未在iptables中打开,我仍可以访问nginx欢迎页面:

$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 23 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

为什么会这样?

为了公开端口,您必须将内部docker网络与外部docker网络通信,因此docker将自己的
docker
链添加到iptables中,由自己管理。当您使用
-p80:80
选项公开容器上的端口时,Docker会向该链添加一条规则

在规则列表中,您可以找到:

-码头工人-d172.17.0.2/32-i docker0-o docker0-p tcp-m tcp--dport 80-j ACCEPT

如果您不希望Docker摆弄iptables,您可以将参数
--iptables=false
添加到Docker守护程序执行器,但是Docker命令的“暴露”部分可能无法自动工作,您可能需要添加一些额外的iptables规则。我还没有测试过

您可能会发现选项
/etc/default/docker
/etc/systemd/system/docker.service.d
,具体取决于您使用的是systemd、upstart还是其他

您可能希望检查以下任一链接:


按本地主机访问欢迎页面:80?否,访问