Docker iptables的错误解决
作者:九皇叔叔
问题说明
执行的 docker
命令如下,启动 nginx 并设置宿主机端口 (8080) 与容器端口 (80) 的映射,出现了一个错误提示:iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
[root@localhost ~]# docker run -d -p 8080:80 --name ng nginx d3e86c9e5651c07167bf6a4f6eacaefa3f0d1734d03f993dd059575394712fab docker: Error response from daemon: driver failed programming external connectivity on endpoint ng (67f87043e441fddd238cb9844f0eeeacdbf298b8c64b6c92e2319cde16ba6a1b): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)). [root@localhost ~]#
问题分析
这个错误提示表明 Docker
在尝试设置端口转发时,遇到了 iptables
配置问题。具体错误信息显示,iptables
试图创建一条规则,但未能找到所需的链或目标。
这个问题可能与以下几种情况有关:
iptables
模块缺失或未加载:某些系统默认情况下可能没有加载iptables
模块。iptables
规则损坏:如果iptables
规则集损坏或配置不正确,也可能会导致这个错误。- 防火墙冲突:如果系统上运行了另一个防火墙管理工具(如
firewalld
),可能会与 Docker 的iptables
配置冲突。
解决步骤
前置说明:
本次遇到问题,是因为 ip_tables
模块未加载引起;手动加载了一下、并重启 docker,问题得以解决。
1. 确保 iptables 模块已加载
检查 iptables
模块是否已加载:
lsmod | grep ip_tables
如果没有输出,说明 iptables
模块未加载,可以手动加载:
modprobe ip_tables
2. 检查和重启 docker 服务
有时候,重启 docker
服务可以解决问题:
systemctl restart docker
3. 检查 firewalld 状态
如果系统上运行了 firewalld
,尝试临时停止它以确定是否是它引起的问题:
# 停止防火墙 systemctl stop firewalld # 禁用防火墙 systemctl disable firewalld.service
然后再尝试运行 Docker 容器。如果确认是 firewalld
的问题,可以通过 firewalld
配置来允许 Docker 管理 iptables
规则。
4. 重置 iptables 规则
如果 iptables
规则集可能损坏,可以尝试重置它:
iptables -F iptables -t nat -F iptables -X iptables -t nat -X
然后重启 docker
服务:
systemctl restart docker
5. 查看和更新 Docker 配置
确保 Docker 使用的是正确的 iptables
配置。在 Docker 的配置文件(通常在 /etc/docker/daemon.json
)中,确保包含以下设置:
{ "iptables": true }
如果进行了修改,重启 Docker 服务以应用更改:
systemctl restart docker
总结
上述步骤涵盖了大多数情况下可能导致 iptables
相关问题的原因及其解决方法。通过依次检查和调整这些配置,你应该能够解决 Docker 容器启动时的端口转发问题。如果问题仍然存在,请查看系统日志(如 /var/log/messages
或 dmesg
)以获得更多调试信息。
到此这篇关于Docker iptables的错误解决的文章就介绍到这了,更多相关Docker iptables内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- docker的iptables策略详解和用户自定义策略的添加方式
- docker的WARNING:bridge-nf-call-iptables is disabled的解决方案
- iptables使用及docker的iptables规则
- 解决docker安装完成报:bridge-nf-call-iptables is disabled问题
- Docker与iptables及实现bridge方式网络隔离与通信操作
- Docker中iptables规则在iptables重启后丢失的完整过程
- 详解Docker使用Linux iptables 和 Interfaces管理容器网络
- 在Docker容器中使用iptables时的最小权限的开启方法
- iptables如何限制宿主机跟Docker IP和端口访问(安全整改)