Podman 作为轻量级的容器运行时,在长期频繁的使用过程中,会持续累积大量不必要的垃圾数据,这些数据不仅会占用服务器或本地主机的大量磁盘空间,还可能导致容器启动速度变慢、镜像拉取失败、磁盘使用率告警等问题,因此需要我们定期手动执行清理操作,精准释放被占用的磁盘资源。
从垃圾数据的构成来看,主要包含以下几类:
未使用的镜像:拉取新版本镜像后遗留的旧版本镜像、构建镜像时产生的中间层镜像、下载失败的残缺镜像文件。
停止的容器:运行结束后未及时删除的容器实例,这类容器会残留日志文件、挂载目录和配置数据。
悬空卷:容器被删除后未同步清理的持久化卷,卷中可能存储了容器运行时的临时数据或日志。
缓存文件:Podman 拉取镜像时的缓存、构建镜像过程中生成的临时缓存目录,以及 /run/user/<UID>/libpod 下的临时文件(如前文报错中提到的 infra-container 残留文件)。
为了清理上面这些垃圾数据,Podman 为我们提供了一个 podman system prune 命令,用于一键删除系统中「闲置 / 无用」的容器、镜像、数据卷、构建缓存、网络等资源,是释放磁盘空间、清理 Podman 冗余资源的关键工具。
运行 podman system prune --help 命令,查看语法格式:
C:\Users\Administrator> podman system prune --help 清理未使用的数据 说明: podman system prune 清理未使用的数据 用法: podman system prune [选项] 示例: podman system prune 选项: -a, --all 清理所有未使用的数据 --build 清理构建容器 --external 清理存储中不受 Podman 管控的容器数据 --filter 字符串数组 提供过滤条件(例如:'label=<键>=<值>') -f, --force 不提示确认信息,默认值为 false --volumes 清理卷
(1)清理闲置容器、未被引用的镜像、构建缓存、无用网络(默认交互式确认)
C:\Users\Administrator> podman system prune WARNING! This command removes: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache Are you sure you want to continue? [y/N]
此时,输入 y 即可完成清理。
(2)非交互式清理,自动跳过确认,适合脚本/自动化。例如:
C:\Users\Administrator> podman system prune -f Deleted Containers 66035faba1f6a661c0c29a9418d6b95a43dc621758016786da61207ffe479b36 Deleted Networks prod_network springcloud-network test my-network my-pod-network Total reclaimed space: 24.98kB
不需要用户输入 y/N 进行确认,自动完成清理。
(3)清理所有闲置资源,包括被停止容器引用的镜像,谨慎操作,可能会误删除数据
C:\Users\Administrator> podman system prune -a WARNING! This command removes: - all stopped containers - all networks not used by at least one container - all images without at least one container associated with them - all build cache Are you sure you want to continue? [y/N]
输入 y 确认,即可清除数据。
(4)仅清理 7 天前创建的闲置资源
# 清理 7 天前(168 小时)创建的停止容器/悬空镜像 C:\Users\Administrator> podman system prune -af --filter "until=168h" Deleted Images 1c390e3bb5cb9c724e3947b45e57c8d73f0afe2b308141261c5669d7d97a452e 5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0 778c3ea605c2c786ad6f7b9efe50c065903b1b4c7a4f5b2c6d76507b01402470 d4918ca78576a537caa7b0c043051c8efc1796de33fee8724ee0fff4a1cabed9 706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38 f6b0ca07d79d7d19c8da64558c3ccdd4ea635ac2193f551a1cb5370f33b494e8 Total reclaimed space: 1.257GB
该命令支持的过滤条件及示例:
until=<duration> 清理指定时间前创建的资源,如 until=24h(24 小时前)、until=7d(7 天前)
label=<key>=<value> 清理匹配标签的资源,如 label=env=test(清理标签为 env=test 的资源)
container=<name/id> 仅清理指定容器关联的闲置资源,如 container=my-old-container