巨坑!docker 无视系统防火墙,在防火墙端口未开启的情况下允许公网访问,造成重大安全隐患。 官方无视该问题:https://github.com/moby/moby/issues/4737 万能的网友通过以下方法解决:

修改docker配置文件

新增配置 文件路径 /etc/docker/daemon.json 禁止docker修改iptable配置

"iptables": false

启用封包转发

ufw default allow routed

修改防火墙配置

文件路径 /etc/ufw/before.rules 在文件最后新增

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o net -s 172.18.0.0/16 -j MASQUERADE
COMMIT

注:网桥IP:172.18 通过命令docker network inspect net名称查看,配置错误宿主机无法访问映射的docker端口。

运行容器访问宿主机端口

ufw allow from 172.18.0.0/16

注:如果不设置容器没有links配置是不能访问到其他容器端口的,也不能访问到宿主机端口。

重启ufw

ufw disable
ufw enable

重启docker

systemctl daemon-reload 
systemctl restart docker

未被允许访问的端口公网无法访问了。