问题:
docker查看容器的命令僵死
docker ps -a
尝试:
- 方案1:重启wsl
sudo reboot
或在cmd内重启
wsl --shutdown
结果:
未能解决。重启之后依旧docker进程僵死
- 方案2:强制杀死dockerd和containerd进程
sudo pkill -9 dockerd
sudo pkill -9 containerd
确认docker是否遗留进程
ps aux | grep -E '(dockerd|containerd)' | grep -v grep
再次重启进程
sudo systemctl stop docker
结果:
未能解决。无法重启,systemctl命令卡死
解决方案:
- 查看启动日志
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: activating (start) since Fri 2025-10-17 14:43:50 JST; 32s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 7601 (dockerd)
Tasks: 19
Memory: 98.3M
CPU: 359ms
CGroup: /system.slice/docker.service
├─7601 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
└─8078 /usr/sbin/iptables --wait -t raw -C PREROUTING -d ::ffff:172.20.0.3 "" "" -i br-1b8f5c17e0d8 -j DROP
Oct 17 14:43:50 IronLotus systemd[1]: Starting Docker Application Container Engine...
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.475976842+09:00" level=info msg="Starting up"
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.476433825+09:00" level=info msg="OTEL tracing is not>
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.476501222+09:00" level=info msg="CDI directory does >
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.476508569+09:00" level=info msg="CDI directory does >
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.519721015+09:00" level=info msg="Creating a containe>
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.539870834+09:00" level=info msg="[graphdriver] using>
Oct 17 14:43:50 IronLotus dockerd[7601]: time="2025-10-17T14:43:50.593467535+09:00" level=info msg="Loading containers:>
Oct 17 14:44:11 IronLotus dockerd[7601]: time="2025-10-17T14:44:11.403163877+09:00" level=warning msg="xtables contenti>
lines 1-22/22 (END)
- 问题分析
Docker 服务确实卡在了启动阶段(activating (start)),并且日志中出现了 xtables contention警告。 这通常与系统资源或底层配置冲突有关。判断是iptables的规则存在冲突和锁竞争。 在docker意外中断后,再次配置网络的时候出现问题。
- 解决流程
- 清理iptables规则
sudo iptables -t filter -F
sudo iptables -t filter -X
sudo systemctl restart docker
- 关闭防火墙防火墙
sudo systemctl stop firewalld
(后续查明wsl不需要防火墙 直接禁用)
# 停止 firewalld 服务
sudo systemctl stop firewalld
sudo systemctl disable firewalld
小结:
这个问题通常发生在 Docker 尝试配置其网络规则(如创建桥接网络和设置 iptables 规则)时,与系统上另一个管理防火墙的服务(最常见的是 firewalld)发生了资源争夺。两者都试图同时修改系统的 iptables 规则,从而引发“锁竞争”(xtables contention),最终导致 Docker 守护进程挂起
后续预防
- 在 WSL 环境中,通常不需要运行 firewalld。保持其禁用状态即可。