docker进程僵死对症方案(网络问题)


问题:

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。保持其禁用状态即可。