问题描述
在默认情况下,我们会发现当我们机器跑了docker,如果我设置了一个容器开放端口(假设为80),那么会发现一个问题,即使我们在Linux的默认防火墙UFW中禁止了80端口的入站,但是外界仍然能访问80端口。
原因解释
这是因为docker的设计思路导致的,docker认为所有容器开放的端口,都是公网可访问的,所以docker直接将自己的规则写到了Linux的iptables,并且比UFW的权限更高,所以导致了UFW的规则无效。
如何处理
我们可以配置Docker,让docker不对Iptables进行篡改。
我们前往修改/etc/docker/daemon.json,配置文件应该类似如下
{
"registry-mirrors": [
"https://docker.1ms.run"
],
"iptables": true
}
我们修改为
{
"registry-mirrors": [
"https://docker.1ms.run"
],
"iptables": false
}
然后重新开启即可(这会重启容器),重启命令为
sudo systemctl restart docker
备注:
如果是宝塔面板的用户的话,可以直接左侧栏docker=>上方设置=>iptables开关,将这个开关关掉。(这会重启容器),如下图所示
