Docker使容器端口向公众开放



我在 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。

相关内容

  • 没有找到相关文章

最新更新