Podman 教程

Podman 删除容器

Podman 长期使用后,会累积大量闲置容器。这些容器会持续占用磁盘与内存资源,及时删除可有效清理无用实例、释放系统资源,也能按需重置运行环境。

Podman 删除容器的核心命令为 podman rm,支持单个、多个或全部容器的删除操作,还能强制清理运行中的容器,轻松满足不同场景下的资源清理需求。

基础语法

podman rm 命令的基本语法如下:

podman rm [选项] 容器ID或名称...

常用选项说明:

  • -f, --force:强制删除运行中的容器(类似 docker rm -f)。

  • -l, --link:删除指定的链接(已废弃,建议直接删除容器)。

  • -v, --volumes:删除容器关联的匿名卷(需注意:命名卷不会被删除)。

  • -a, --all:删除所有处于停止状态的容器(运行中的容器不会被删除,需配合 -f 强制删除所有容器)。

点击查看 podman rm 命令手册

  

常见使用场景示例

删除单个停止的容器

没有任何选项的 podman rm 命令只能删除已停止的容器,若容器正在运行,会提示错误(需先停止或强制删除)。例如:

# 删除名为 my-ubuntu 的容器
C:\Users\hxstri> podman rm my-ubuntu
my-ubuntu

# 删除名为 my-nginx 的容器,由于 my-nginx 容器正在运行,删除失败
C:\Users\hxstri> podman rm my-nginx
Error: cannot remove container 66c213f1729f4a77009002e7c711da0c4dbcd748877205d554372708aea4c0bc as it is running - running or paused containers cannot be removed without force: container state improper

同时删除多个容器

如果要一次删除多个容器,可以在 podman rm 命令后面跟随多个容器的名称或 ID,之间使用空格分隔。例如:

C:\Users\hxstri> podman rm redis mysql57 infallible_ishizaka
redis
mysql57
infallible_ishizaka

注意:可以将容器名称替换为容器 ID,并且删除的容器必须没有正在运行。

强制删除(含运行中容器)

若容器处于运行状态,需要使用 -f(--force)参数强制删除(相当于先停止再删除),例如:

# 确认 my-nginx 容器正在运行
C:\Users\hxstri> podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED     STATUS      PORTS                 NAMES
66c213f1729f  docker.io/library/nginx:latest  nginx -g daemon o...  3 days ago  Up 6 hours  0.0.0.0:9000->80/tcp  my-nginx

# 强制删除名为 my-nginx 的容器
C:\Users\hxstri> podman rm -f my-nginx
my-nginx

删除所有已停止的容器

下面命令仅适合在 Linux 系统中进行执行,Linux 系统会先执行 ${} 中的命令,然后将 $(podman ps -aq) 替换为 podman ps -aq 的结果(即所有容器的 ID,-a 显示所有,-q 只输出 ID)。例如:

podman rm $(podman ps -aq)

注意:进行该操作需要谨慎执行,避免删除有用的容器。

强制删除所有容器(包括运行中)

下面命令同样仅适用 Linux 系统内,比删除所有已停止的容器多了一个 -f 参数,强制删除容器。例如:

podman rm -f $(podman ps -aq)

注意:该操作非常危险,它将一次性清理系统中所有容器,谨慎使用,避免误删重要容器。

删除容器时同时删除关联的匿名卷

使用 -v(--volumes)参数会删除容器挂载的匿名卷(命名卷不会被删除,需手动清理)。例如:

# 创建命名卷(若不存在,也可在 run 时自动创建)
C:\Users\hxstri> podman volume create nginx-html
nginx-html

# 创建 Nginx 容器,同时挂载命名卷和匿名卷
# -v nginx-html:/usr/share/nginx/html 挂载命名卷(宿主机命名卷 -> 容器内网页目录)
# -v /var/log/nginx 挂载匿名卷(容器内日志目录,宿主机路径自动分配)
C:\Users\hxstri> podman run -d --name my-nginx -p 9000:80 -v nginx-html:/usr/share/nginx/html -v /var/log/nginx nginx:latest
4bcfb60ac53753880a03c106f7c30739332cadfd264f16c071e5e1019035a709

打开 Podman Desktop 客户端,查看 my-nginx 的详细信息,如下图:

Podman 删除容器

Podman 删除容器

继续执行删除容器同时删除挂载的匿名卷的命令,如下:

C:\Users\hxstri> podman rm -v my-nginx
my-nginx

再次返回 Podman Desktop 查看卷的信息,如下图:

Podman 删除容器

忽略不存在的容器(不报错)

使用 --ignore 参数可以确保删除不存在的容器时不输出错误信息,适合脚本中使用。例如:

C:\Users\hxstri> podman rm -f --ignore not_exist_container

C:\Users\hxstri>

删除容器前等待停止(针对运行中容器)

使用 -t(--timeout)参数可以指定等待容器停止的秒数(默认 10 秒),超时后强制终止。

注意,使用 --time 选项时必须指定 --force 选项。例如:

# 未指定 -f 选项,删除失败
C:\Users\hxstri> podman rm -t 10 rabbitmq
Error: --force option must be specified to use the --time option

# 删除成功
C:\Users\hxstri> podman rm -t 10 -f rabbitmq
rabbitmq

安全删除单个容器

如果你是 Linux 服务器,在删除容器前可以先使用 podman stop 命令停止容器, 停止成功后再执行 podman rm 命令删除容器,例如:

[user@localhost ~]$ podman stop my-nginx-alpine && podman rm my-nginx-alpine
my-nginx-alpine
my-nginx-alpine

还可以借助 Linux 脚本能力,批量清理所有已退出的容器(保留运行中),例如:

podman rm $(podman ps -qf "status=exited")

上面命令中,-f "status=exited" 筛选状态为“已退出” 的容器。

注意事项

在使用 podman rm 删除容器前一定要谨慎操作,容器一旦删除就找不回来了。如果你没有将容器运行中的数据、日志、配置信息挂载到外部目录或者命名卷中,这些数据会随着容器被删除一起删除。

  • 容器删除后,其日志、配置等数据会被清除(除非日志由外部驱动存储,如 journald)。

  • 若容器挂载了外部目录(bind mount),删除容器不会影响宿主机上的挂载目录数据。

更多关于 podman rm 命令的信息请参考命令手册。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号