docker重启redis报错:iptables failed

发布于:2025-09-06 ⋅ 阅读:(16) ⋅ 点赞:(0)
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6379 -j DNAT --to-destination 172.17.0.4:6379 ! -i docker0: iptables: No chain/target/match by that name.

方法一:重启 Docker 服务(最简单,通常能解决问题)

这是最直接有效的方法,重启 Docker 服务会重新创建所有必要的 iptables 链和规则。

bash

# 1. 重启 Docker 服务
sudo systemctl restart docker

# 2. 再次尝试重启 Redis 容器
docker restart myredis

# 3. 检查容器状态
docker ps

方法二:如果方法一无效,完全重启 Docker 及相关组件

bash

# 1. 停止所有容器
docker stop $(docker ps -aq)

# 2. 停止 Docker 服务
sudo systemctl stop docker

# 3. 清理旧的 iptables 规则(谨慎操作)
sudo iptables -t nat -F
sudo iptables -t filter -F

# 4. 重启 Docker
sudo systemctl start docker

# 5. 启动 Redis 容器
docker start myredis

# 6. 检查状态
docker ps
docker logs myredis
方法三:最彻底的修复方式

如果上述方法都不行,可以尝试重建整个 Docker 网络栈:

bash

# 1. 停止 Docker
sudo systemctl stop docker

# 2. 清理所有网络接口和规则
sudo ip link delete docker0
sudo iptables -t nat -F
sudo iptables -t filter -F

# 3. 重启 Docker(它会自动重建网络)
sudo systemctl start docker

# 4. 启动容器
docker start myredis

验证修复是否成功

修复后,请使用以下命令验证:

bash

# 1. 检查容器状态
docker ps

# 2. 检查端口映射是否正常
docker port myredis

# 3. 在宿主机上测试连接
redis-cli -h 127.0.0.1 -p 6379 -a ecan@redis

# 4. 从其他内网机器测试 telnet(应该能通了)
telnet <你的服务器IP> 6379

重要提示

  1. 谨慎操作 iptables:方法二和三中的 iptables -F 会清空所有规则,如果服务器上有其他网络服务,可能会暂时影响网络连接。

  2. 首选方法一:绝大多数情况下,sudo systemctl restart docker 就能解决问题。

  3. 根本原因:这个错误通常发生在系统重启、防火墙规则被其他程序修改、或者手动操作 iptables 之后。

请先尝试方法一,这有很高概率能解决您的问题。重启 Docker 服务后,不仅 Redis 容器能正常启动,远程连接问题应该也能一并解决。


网站公告

今日签到

点亮在社区的每一天
去签到