You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Debian类系统从零配置iptables后Docker容器无法启动,求Docker网络正常工作的iptables过滤表规则

Debian类系统从零配置iptables后Docker容器无法启动,求Docker网络正常工作的iptables过滤表规则

哥们,我太懂你这种从零搭iptables结果把Docker坑了的情况了!你之前用sudo iptables -F清空规则、sudo iptables -X删除所有自定义链的时候,把Docker自动创建的DOCKER相关链也一并删掉了——这就是启动容器时报错“找不到链/目标/匹配项”的核心原因。

Docker启动时会自动生成专属的iptables链(比如DOCKERDOCKER-USERDOCKER-ISOLATION-*这些)来管理容器网络,咱们直接删光链,Docker自然没法正常配置网络了。下面给你一套能兼顾自定义规则和Docker正常运行的配置步骤:

第一步:让Docker重新生成专属iptables链

先重启Docker服务,它会自动重建所需的链和基础规则:

sudo systemctl restart docker

第二步:重新配置你的自定义iptables规则(保留Docker链)

这次咱们只清空filter表的规则,不删除自定义链(包括Docker的),然后添加必要规则:

# 清空filter表的所有现有规则,但保留自定义链
sudo iptables -F

# 设置INPUT链默认策略为ACCEPT(和你原来的配置一致)
sudo iptables -P INPUT ACCEPT

# 允许已建立/相关的连接(必须保留,不然容器和外部的通信会断)
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 允许本地回环接口流量(Docker内部通信、容器和宿主机交互全靠它)
sudo iptables -A INPUT -i lo -j ACCEPT

# 保留你需要的80/443端口外部访问规则
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许Docker网桥的流量(Docker网桥一般是docker0或br-开头的虚拟网卡)
sudo iptables -A INPUT -i docker0 -j ACCEPT
sudo iptables -A INPUT -i br-+ -j ACCEPT

# 关键:设置FORWARD链默认策略为ACCEPT(Docker容器之间、容器和外部通信需要转发)
# 如果你想更严谨,也可以只允许Docker相关的转发,替换上面这行:
# sudo iptables -P FORWARD ACCEPT
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i docker0 -j ACCEPT
sudo iptables -A FORWARD -i br-+ -j ACCEPT

第三步:让规则永久生效(可选但推荐)

Debian类系统可以用iptables-persistent保存规则,避免重启后丢失:

# 安装持久化工具
sudo apt install -y iptables-persistent
# 保存当前规则到配置文件(安装过程中会提示,选Yes即可)
sudo iptables-save > /etc/iptables/rules.v4

注意事项

  • 以后不要再随便用iptables -X删除所有自定义链,除非你先停止Docker服务,否则会再次破坏Docker的网络链。
  • 如果后续修改规则,记得用iptables-save保存到/etc/iptables/rules.v4,不然重启后会失效。

备注:内容来源于stack exchange,提问作者user2626210

火山引擎 最新活动