你遇到的这个错误是由于 Docker 在配置 iptables 规则时失败导致的,错误信息 No chain/target/match by that name
表明 iptables 找不到所需的链或规则。这通常是因为 Docker 网络组件与系统防火墙之间存在冲突,或者 iptables 配置损坏。
解决方法
1. 重启 Docker 服务
有时候简单的重启就能解决问题:
sudo systemctl restart docker
2. 重置 Docker 网络
如果重启无效,可以尝试重置 Docker 的网络组件:
# 停止 Docker 服务
sudo systemctl stop docker
# 清除 iptables 中的 Docker 规则
sudo iptables -t nat -F
sudo iptables -t nat -X DOCKER
sudo iptables -t filter -F DOCKER
sudo iptables -t filter -F DOCKER-ISOLATION-STAGE-1
sudo iptables -t filter -F DOCKER-ISOLATION-STAGE-2
sudo iptables -t filter -X DOCKER
sudo iptables -t filter -X DOCKER-ISOLATION-STAGE-1
sudo iptables -t filter -X DOCKER-ISOLATION-STAGE-2
# 重启 Docker 服务
sudo systemctl start docker
3. 检查并修复 iptables 配置
如果上述方法都无效,可能需要检查并修复 iptables 配置:
# 安装 iptables-persistent 以持久保存规则(适用于 Ubuntu/Debian)
sudo apt-get install iptables-persistent
# 或者在 CentOS/RHEL 上使用:
# sudo yum install iptables-services
# 保存当前规则
sudo netfilter-persistent save
# 重新加载规则
sudo netfilter-persistent reload
4. 禁用冲突的防火墙服务
如果你安装了其他防火墙(如 ufw、firewalld 等),可能需要临时禁用它们来测试:
# 禁用 ufw(Ubuntu/Debian)
sudo ufw disable
# 禁用 firewalld(CentOS/RHEL)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
最终建议
在尝试上述步骤后,再次启动你的 MySQL 容器:
docker-compose up -d
如果问题仍然存在,可能需要考虑升级 Docker 到最新版本,或者检查系统是否有其他软件干扰了 Docker 的网络配置。