解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题

Posted qjfoidnh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题相关的知识,希望对你有一定的参考价值。

在docker中运行第三方服务时,通常需要绑定服务端口到本地主机。但使用 -p 参数进行的端口映射,会自动在iptables中建立规则,绕过firewalld,这对于端口级的黑白名单控制管理是很不利的,所以我们需要对iptables进行手动修改。

 

这里以从名为centos.19.09.05的image建立一个容器为例:

首先,如果系统是CentOS7的话,需要关闭自带firewalld防火墙,并切换为iptables.

假设需要将新容器的27017端口映射到主机的27017端口,一般情况下我们使用命令

docker run -idt -p 27017:27017 centos.19.09.05 /bin/bash

在容器中27017端口服务运行起来后,我们在外网使用端口扫描工具,发现本地主机的27017端口已经打开了,而我们还未在防火墙上进行开放操作;此时检查iptabes规则:

iptables --list

发现在Chain DOCKER下多出了一条

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:27017

其中172.17.0.2为该容器在docker网桥中的IP,可见该规则允许任意来源的地址访问27017端口,所以我们需要删除该规则,并替换成安全性更高的规则。

#删除DOCKER链中的1号规则;如果待删除规则不位于第一行,则将数字改为对应行号
iptables -D DOCKER 1

#此容器只接受来自地址123.345.456.567的连接请求
iptables -A DOCKER -s 123.345.456.567 -d 172.17.0.2 -p tcp --sport 27017 -j ACCEPT

#主机接受来自docker0网桥上的所有请求,希望容器能访问主机可选此项
iptables -A DOCKER -s 172.17.0.0/24 -j ACCEPT

再次进行端口扫描,发现27017端口已经关闭,只有IP为123.234.345.456的主机能够连接。

以上是关于解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在docker容器中开启两个端口映射

已经创建 且运行一段时间的docker容器 添加新的映射端口

docker 端口映射被删除,映射断开问题解决

无法连接docker端口映射问题的解决

Docker运行容器端口映射

解决CentOS7 docker容器映射端口只监听ipv6的问题