WSL启用/禁用Docker Desktop时出现重复容器问题求助
解决方案
一、先定位并临时释放占用端口的进程
先确认目标端口(比如PostgreSQL的5432、NATS的4222)被哪个进程占用,在WSL终端执行:
ss -tulpn | grep <你的端口号>
输出中pid=<进程ID>字段对应占用端口的进程,临时终止它:
sudo kill -9 <进程ID>
二、排查并清理WSL本地Docker残留
Docker Desktop启动后,WSL的Docker上下文会自动切换到desktop-linux,导致常规docker ps无法看到WSL本地Docker daemon管理的容器。
- 切换到WSL本地Docker上下文:
docker context use default
- 查看本地所有容器:
docker ps -a
- 停止并删除所有残留容器:
docker stop $(docker ps -aq) docker rm $(docker ps -aq)
- 清理无用的镜像、卷、网络等资源:
docker system prune -af
- 禁用WSL本地Docker服务自动启动:
sudo systemctl disable docker.service docker.socket
三、排查并清理k3s残留
k3s使用containerd作为容器运行时,不会被常规Docker命令检测到,需要用containerd工具操作:
- 检查k3s服务状态:
sudo systemctl status k3s
- 停止并禁用k3s服务:
sudo systemctl stop k3s sudo systemctl disable k3s
- 查看k3s管理的容器(k8s.io命名空间下):
sudo ctr -n k8s.io containers list
- 停止并删除这些容器:
sudo ctr -n k8s.io containers stop $(sudo ctr -n k8s.io containers list -q) sudo ctr -n k8s.io containers rm $(sudo ctr -n k8s.io containers list -q)
- 清理k3s核心数据目录:
sudo rm -rf /var/lib/rancher/k3s
- 可选:清理k3s相关镜像:
sudo ctr -n k8s.io images rm $(sudo ctr -n k8s.io images list -q)
四、验证效果
执行wsl --shutdown重启WSL,再打开终端验证:
- 执行
ss -tulpn | grep <端口号>,确认端口不再被占用 - 若清理Docker残留,可切换回Docker Desktop上下文
docker context use desktop-linux,确保原有容器正常运行不受影响
内容的提问来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

