docker使容器的端口向公众开放

我有nginx的centos7docker集装箱。

尽pipe该端口未在Firewalld中打开,但外部端口80仍然可用。 这里公共区域的规则:

# firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: eno3 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: 

但是链中的这个端口有一个自动规则DOCKER:

 # iptables -L DOCKER Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http 

如何从外面closures这个端口? 我已经跑了命令,但没有帮助:

 # firewall-cmd --zone=public --remove-port=80/tcp --permanent Warning: NOT_ENABLED: 80:tcp success 

我读过文档 – https://docs.docker.com/engine/userguide/networking/,但仍然没有得到它..其实我需要打开这个端口80只为我指定的networking1.2.3.4/24。

Docker默认设置iptables规则。 请参阅Docker的了解容器通信以获取更多信息。 你也可以在Docker守护进程中用--iptables=false来禁用这个function。

docker-compose文件版本2或者替代地,您可以使用expose关键字而不是端口在Docker docker-compose.yml文件中仅在Dockernetworking中打开此端口。

也就是说,如果你想使用firewalld,你应该禁用iptables。