在使用 Docker 时,您可能会发现 UFW(Uncomplicated Firewall)防火墙的规则对 Docker 容器的网络流量不起作用。这是因为 Docker 默认直接修改 iptables 规则,绕过了 UFW 的控制。
那么我们应该如何解决这个问题呢?
这里以开放 22、80 和 443 以及8443 的 UDP 端口为示例:
首先,确保您的系统已安装 UFW,并将其启用:
bashsudo apt update
sudo apt install ufw
sudo ufw enable
使用以下命令开放 SSH(22)、HTTP(80)和 HTTPS(443)端口:
bashsudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 8443/udp
ufw-docker
是一个用于解决 Docker 与 UFW 防火墙规则冲突的工具。 安装步骤如下:
bashsudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
sudo chmod +x /usr/local/bin/ufw-docker
运行以下命令以安装 ufw-docker
:
bashsudo ufw-docker install
该命令会修改 UFW 的配置文件,使其与 Docker 的网络规则兼容。
可能由于某些未知原因,重启 UFW 之后规则也无法生效,重启服务器后即可生效。
bashsudo reboot
使用以下命令查看 UFW 的状态,确保所需端口已开放:
bashsudo ufw status
输出应显示 22、80 和 443 端口已被允许。
首先,使用以下命令列出所有规则编号:
bashsudo ufw status numbered
删除指定编号的规则,例如删除编号 3 和 4 的规则:
bashsudo ufw delete 3
sudo ufw delete 4