docker使容器端口向公众开放

时间:2017-07-04 21:33:21

标签: docker containers port centos7 firewalld

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

2 个答案:

答案 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]