经过尝试,以下方法无法在实际应用中获得良好的效果,已经弃之不用。全部转而使用iptables配置防火墙,同时弃用ufw!
UFW作为iptables的前端,被Docker直接忽视。Docker在容器建立时候如果对于端口开放有需求会直接修改iptables的规则,令到ufw的规则失效。
使用以下命令查看docker 在防火墙上开的洞
iptables -L DOCKER
解决方法来自https://github.com/chaifeng/ufw-docker
下载并安装ufw-docker
sudo wget -O /usr/local/bin/ufw-docker \
https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
chmod +x /usr/local/bin/ufw-docker
ufw-docker install
systemctl restart ufw
安装完成后用以下命令为每个需要对外开放的容器打开需要的端口
ufw-docker allow 【容器名称】
完成以上步骤,此时已将容器端口在ufw后开放,需要通过ufw命令再一次将端口正式对外开放
ufw allow 【端口】
不要忘记增加一条记录确保docker容器之间的内网传输不被阻拦
ufw allow from 172.16.0.0/12 comment 'all traffic between docker containers'