目标:磁盘空间释放、坏镜像删掉、容器正常启动
报错:
$ podman rmi -f 82cfc386c1bcbc6c12de84a888ab36a6716b5ce8c4338b01561a52a22d1e0d49
Error: 2 errors occurred:
* write /home/taskmanager/.local/share/containers/storage/overlay-containers/.tmp-containers.json2603214207: no space left on device
* write /home/taskmanager/.local/share/containers/storage/overlay-layers/.tmp-layers.json736780310: no space left on device
核心问题:磁盘彻底写满了,连执行删除命令的临时空间都没有,所以删镜像也报错,优先级:先
清空间 → 再删垃圾 → 最后操作容器镜像
先清空间
# 1. 紧急清理系统最大的垃圾:日志文件,瞬间释放几G空间
sudo journalctl --vacuum-size=100M
# 2. 清理用户目录缓存+临时文件,释放/home空间(你的报错目录)
rm -rf ~/.cache/* && rm -rf /tmp/*
# 3. 强制清空Podman/Docker所有缓存+垃圾,不询问直接删
podman system prune -a -f --volumes
删那个损坏镜像
podman rmi -f 82cfc386c1bcbc6c12de84a888ab36a6716b5ce8c4338b01561a52a22d1e0d49
重启项目容器
podman rm -f task-manager
podman run -d --name task-manager -p 6006:6006 localhost/task-manager-backup:latest gunicorn -w4 -b0.0.0.0:6006 app:app
验证是否全部恢复正常
podman images
podman ps
Podman 与 Docker 的无缝切换
当前是Podman模拟Docker,两者99% 的命令完全一致,不需要做任何修改,日常使用:
- 所有
docker xxx命令,比如docker ps/run/rm/pull/save/load都可以正常敲,执行的是 Podman; - Podman 比 Docker 更轻量、无守护进程,对 python 项目 / 后端服务更友好,无需替换为原生 Docker;
- 唯一区别:Podman 的容器存储路径和 Docker 不同,但使用无感知,不用管。
可选:安装原生 Docker(如果想彻底替换 Podman)
如果强迫症想装原生 Docker,执行下面的命令一键安装(Ubuntu/Debian 通用),安装后 Podman 的软链接会被覆盖,docker xxx就是原生 Docker 了:
sudo apt-get update && sudo apt-get install docker.io docker-compose -y
sudo systemctl start docker && sudo systemctl enable docker
sudo usermod -aG docker $USER
执行完后注销重新登录,即可免 sudo 执行 docker 命令。