我在带有nginx的centos7 docker容器上。
虽然此端口未在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
如何从外面关闭此端口? 我已经执行了命令,但没有帮助:
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
Warning: NOT_ENABLED: 80:tcp
success
我已阅读过文档 - https://docs.docker.com/engine/userguide/networking/ 但仍然没有得到它.. 实际上我只需要为我指定的网络1.2.3.4/24打开这个端口80。
答案 0 :(得分:1)
Docker默认设置iptables规则。有关详细信息,请参阅Docker's Understand container communication。您也可以使用*
在Docker守护程序中禁用它。
另外,对于docker-compose文件版本2+,您可以使用--iptables=false
关键字而不是expose
来仅在ports
文件中的Docker网络中打开此端口。
那就是说,如果你想使用firewalld,你应该禁用iptables。
答案 1 :(得分:1)
可能有点过时了,但是:
您可能正在使用 3000:3000
之类的东西进行映射。这非常相当于 0.0.0.0:3000:3000
。
您想要的是仅映射到您的本地主机。您可以通过侦听特定 IP 地址来实现此目的,例如 127.0.0.1
(localhost)。
将您的配置更改为 127.0.0.1:[host_port]:[container_port]
。