docker重启redis报错:iptables failed
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
重要提示
谨慎操作 iptables:方法二和三中的
iptables -F
会清空所有规则,如果服务器上有其他网络服务,可能会暂时影响网络连接。首选方法一:绝大多数情况下,
sudo systemctl restart docker
就能解决问题。根本原因:这个错误通常发生在系统重启、防火墙规则被其他程序修改、或者手动操作 iptables 之后。
请先尝试方法一,这有很高概率能解决您的问题。重启 Docker 服务后,不仅 Redis 容器能正常启动,远程连接问题应该也能一并解决。