我在 centos7 docker 容器上安装了 nginx。
端口80 可从外部使用,尽管此端口未在 internetd 中打开。 以下是公共区域的规则:
# 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。
也许有点过期了,但是:
您可能正在使用类似3000:3000
.这非常等同于0.0.0.0:3000:3000
.
您想要的是仅映射到本地主机。您可以通过侦听特定的 IP 地址来实现此目的,例如127.0.0.1
(本地主机)。
将您的配置更改为127.0.0.1:[host_port]:[container_port]
。
Docker 默认设置 iptables 规则。有关更多信息,请参阅 Docker 的了解容器通信。您也可以使用--iptables=false
在 Docker 守护程序中禁用此功能。
或者,使用docker-compose 文件版本 2+,您可以使用expose
关键字而不是ports
仅在docker-compose.yml
文件的 Docker 网络中打开此端口。
也就是说,如果你想使用防火墙,你可能应该禁用iptables。