跳到主要内容

显示当前正在运行的容器的详细信息

podman ps 命令是 Podman 容器管理工具中用于列出当前正在运行的容器信息的命令。Podman 是一个开源的容器管理工具,旨在为用户提供与 Docker 类似的功能,但具有更好的安全性、稳定性和易用性。

命令概述

podman ps 命令的主要作用是显示当前正在运行的容器的详细信息。这些信息包括容器的 ID、使用的镜像、运行的命令、容器的创建时间、当前状态以及容器的端口映射等。通过查看这些信息,开发者可以更好地了解容器的运行状态,从而进行有效的管理和监控。

输出内容

执行 podman ps 命令后,通常会看到以下列信息:

  • CONTAINER ID:容器的唯一标识符,用于区分和管理不同的容器实例。
  • IMAGE:容器所使用的镜像的名称和标签。这有助于了解容器是基于哪个镜像创建的。
  • COMMAND:容器启动时执行的命令。这通常是容器内部应用程序的入口点。
  • CREATED:容器的创建时间,通常以相对于当前时间的相对时间格式显示,如“几分钟前”。
  • STATUS:容器的当前状态,如“运行中”或“已退出”。这有助于了解容器的运行状况。
  • PORTS:容器的端口映射信息。这显示了容器内部的端口如何映射到主机上的端口,以便外部可以访问容器内的服务。
  • NAMES:容器的名称。这是给容器指定的名称,用于在 Podman 命令中引用容器。

可用选项

podman ps 命令支持一些选项来定制输出内容:

  • -a, --all:显示所有容器,包括已停止的容器。这可以帮助你查看所有容器的状态,不仅仅是正在运行的容器。
  • -f, --filter:根据条件过滤输出。你可以使用此选项来指定过滤条件,只显示符合特定条件的容器。
  • -q, --quiet:仅显示容器ID。如果你只需要容器的ID列表,可以使用此选项来简化输出。
  • -s, --size:显示容器的大小。这可以帮助你了解容器占用的磁盘空间。
  • --no-trunc:不截断输出。默认情况下,某些列的输出可能会被截断。使用此选项可以显示完整的输出内容。
  • --sort:对输出进行排序。你可以根据特定的列对输出进行排序,以便更好地组织和查看容器信息。

示例用法

下面是一些使用 podman ps 命令的示例:

  1. 查看正在运行的容器:
podman ps
  1. 查看所有容器,包括已停止的:
podman ps -a
  1. 仅显示容器的ID:
podman ps -q
  1. 显示容器的大小:
podman ps -s
  1. 使用过滤条件查看特定容器:
podman ps -f "name=my-container"

注意事项

  • 在使用 podman ps 命令之前,请确保已经正确安装了 Podman 工具,并且具有足够的权限来执行容器管理操作。
  • 如果你的系统同时安装了 Docker,请注意区分 Podman 和 Docker 的命令和用法,因为两者在某些方面相似,但也有一些不同之处。

podman ps 命令用于列出系统上正在运行的容器。使用 --all 标志可以查看所有容器的信息。默认情况下,它列出以下内容:

  • 容器的 ID
  • 容器所使用的镜像名称
  • 容器正在执行的命令
  • 容器的创建时间
  • 容器的状态
  • 容器使用的端口映射
  • 容器的别名

选项

--all, -a

显示所有容器,默认只显示正在运行的容器。

注意:Podman 与其他工具(如 Buildah 和 CRI-O)共享容器存储。在某些情况下,这些“外部”容器也可能存在于同一存储中。使用 --external 选项可以查看这些外部容器。外部容器在状态列中会显示 'storage'。

--external

显示不受 Podman 控制但存储在容器存储中的外部容器。这些外部容器通常是通过其他容器技术(如 Buildah 或 CRI-O)创建的,并且可能依赖于 Podman 也正在使用的相同容器镜像。在 ps 输出的 COMMAND 和 STATUS 列中,外部容器会用 'buildah' 或 'storage' 来标记。

--filter, -f

对显示的容器进行过滤。 可以使用多个 --filter 标志来指定多个过滤器。 具有相同键的过滤器是包含性的,唯一的例外是 label,它是排他性的。具有不同键的过滤器总是排他性的。

过滤器描述
id使用此过滤器,你可以通过容器的ID来筛选容器。默认情况下,它会匹配ID的前缀,但也支持使用正则表达式进行更复杂的匹配。
name这个过滤器允许你通过容器的名称来查找容器。它支持正则表达式,因此你可以使用通配符或更复杂的模式来匹配容器的名称。
label此过滤器用于查找具有特定标签的容器。你可以指定标签的键(Key)或键和值(Key=Value)的组合来过滤容器。
label!与label过滤器相反,这个过滤器用于查找没有指定标签的容器。同样,你可以指定标签的键或键和值的组合。
exited使用此过滤器,你可以根据容器的退出代码来筛选容器。你需要提供一个整数作为过滤条件。
status这个过滤器允许你根据容器的状态来筛选容器。状态可以是 'created'(已创建)、'exited'(已退出)、'paused'(已暂停)、'running'(运行中)或 'unknown'(未知)。
ancestor通过此过滤器,你可以找到使用特定镜像或其后代镜像创建的容器。它也支持使用正则表达式进行匹配。
before此过滤器允许你找到在某个指定容器之前创建的容器。你可以通过提供另一个容器的ID或名称来作为过滤条件。
since与before相反,此过滤器用于找到在某个指定容器之后创建的容器。同样,你可以提供另一个容器的ID或名称作为过滤条件。
volume使用此过滤器,你可以根据容器中挂载的卷的名称或挂载点目标来筛选容器。
health这个过滤器允许你根据容器的健康状态来筛选容器。状态可以是 'healthy'(健康)或 'unhealthy'(不健康)。
pod此过滤器用于在Kubernetes环境中查找属于特定pod的容器。你可以提供pod的名称或完整或部分ID作为过滤条件。
network通过此过滤器,你可以找到连接到特定网络的容器。你需要提供网络的名称或完整ID作为过滤条件。
until这个过滤器允许你找到在给定时间或持续时间之前创建的容器。你需要提供一个日期时间字符串作为过滤条件。

这些过滤器可以帮助你更精确地管理和查询容器,根据具体的需求来筛选出符合条件的容器列表。你可以根据实际需要组合使用多个过滤器,以便更精确地定位所需的容器。

--format=format 是一个选项,它允许你以JSON格式或Go模板的形式漂亮地打印容器信息。Go模板是一个灵活的方式,允许你自定义输出的格式。

过滤器描述
.AutoRemove如果容器在退出时自动删除,则为true
.CIDFile容器的ID文件
.Command使用的带引号的命令
.Created / .CreatedAt容器的创建时间,格式为Y-M-D H:M:S
.CreatedHuman相对于当前时间的容器创建时间
.ExitCode容器的退出代码
.Exited如果容器已经退出,则为"true"
.ExitedAt容器退出的时间(以epoch秒为单位)
.ID容器的ID
.Image镜像的名称/ID
.ImageID镜像的ID
.IsInfra如果是基础设施容器,则为"true"
.Label string容器的指定标签
.Labels分配给容器的所有标签
.Mounts在容器中挂载的卷
.Names容器的名称
.Networks显示与容器连接的所有网络
.Pid主机系统上的进程ID
.Pod与容器关联的Pod的SHA
.PodName容器的Pod名称
.Ports暴露的端口
.Restarts显示容器的重启次数
.RunningFor容器启动后经过的时间
.Size容器的大小
.StartedAt容器启动的时间(以epoch秒为单位)
.State容器状态的人类友好描述
.Status容器的状态

这个--format=format选项与docker ps等Docker命令结合使用时,可以帮助你以自定义的方式显示容器信息,使得输出更加符合你的需求。你可以使用占位符来插入特定的容器属性,并在模板中自由组合它们,以生成你想要的输出格式。

以下是根据您提供的内容生成的Markdown表格:

选项描述
--help, -h打印使用说明。
--last, -n打印最后创建的n个容器(所有状态)。
--latest, -l显示最新创建的容器(所有状态)(此选项不适用于远程Podman客户端,包括Mac和Windows机器(不包括WSL2))。
--namespace, --ns显示命名空间信息。
--no-trunc不截断输出(默认为false)。
--noheading在容器列表中省略表头。
--pod, -p显示容器关联的pod。
--quiet, -q仅打印容器的数字ID。
--size, -s显示总文件大小。
--sort=created按创建时间对容器进行排序。
--sync强制同步容器状态与OCI运行时,解决状态不一致的问题。
--watch, -w以秒为间隔刷新当前容器的输出。

请注意,在--sort=created的描述中,我添加了“按创建时间对容器进行排序”的描述,因为您提供的原始描述中没有明确说明该选项是按照哪个字段进行排序的。如果您有特定的排序字段要求,请替换成相应的描述。

示例

列出正在运行的容器。

$ podman ps
容器ID 镜像 命令 创建时间 状态 端口 名称
4089df24d4f3 docker.io/library/centos:latest /bin/bash 2分钟前 运行中 2分钟 0.0.0.0:80->8080/tcp, 0.0.0.0:2000-2006->2000-2006/tcp manyports
92f58933c28c docker.io/library/centos:latest /bin/bash 3分钟前 运行中 3分钟 192.168.99.100:1000-1006->1000-1006/tcp zen_sanderson

列出所有容器,包括已停止的。

$ podman ps -a
容器ID 镜像 命令 创建时间 状态 端口 名称
02f65160e14ca redis:alpine "redis-server" 19小时前 Exited (-1) 19小时前 6379/tcp k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0
69ed779d8ef9f redis:alpine "redis-server" 25小时前 Created 6379/tcp k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1

列出所有容器,并包括它们的大小。请注意,由于Podman需要从文件系统中计算大小,这可能需要更长时间。

$ podman ps -a -s
容器ID 镜像 命令 创建时间 状态 端口 名称 大小
02f65160e14ca redis:alpine "redis-server" 20小时前 已退出 (-1) 20小时前 6379/tcp k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0 27.49 MB
69ed779d8ef9f redis:alpine "redis-server" 25小时前 已创建 6379/tcp k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1 27.49 MB

使用自定义的Go格式列出所有容器(无论是否正在运行)。

$ podman ps -a --format "{{.ID}}\t{{.Image}}\t{{.Labels}}\t{{.Mounts}}"
02f65160e14ca redis:alpine map[tier:backend] map[proc:/proc:读写,tmpfs:/run:读写,devpts:/dev/pts:读写,shm:/dev/shm:读写,mqueue:/dev/mqueue:读写,sysfs:/sys:读写,cgroup:/sys/fs/cgroup:读写,/var/run/:/var/run/:读写,/var/run/secrets/kubernetes.io/serviceaccount/:/var/run/secrets/kubernetes.io/serviceaccount/:只读]
69ed779d8ef9f redis:alpine map[batch:no type:small] map[proc:/proc:读写,tmpfs:/run:读写,devpts:/dev/pts:读写,shm:/dev/shm:读写,mqueue:/dev/mqueue:读写,sysfs:/sys:读写,cgroup:/sys/fs/cgroup:读写,/var/run/:/var/run/:读写,/var/run/secrets/kubernetes.io/serviceaccount/:/var/run/secrets/kubernetes.io/serviceaccount/:只读]

请注意,这里.Labels.Mounts字段返回的是map类型,所以输出可能因容器的配置而异。

列出所有容器并显示它们的命名空间信息。

$ podman ps --ns -a
容器ID 镜像 命令 创建时间 状态 端口 名称 命名空间
... ... ... ... ... ... ... IPC:/pid:/mnt:/net:/pidns:/user:/uts

请注意,--ns选项的确切输出格式可能因Podman版本而异,上面的输出是一个示例,实际输出可能有所不同。

列出所有容器,包括它们的大小,并按名称排序。

podman ps -a --size --sort=names  
容器ID 镜像 命令 创建时间 状态 端口 名称 大小
69ed779d8ef9f redis:alpine "redis-server" 25小时前 已创建 6379/tcp k8s_container1_podsandbox1_... 27.49 MB
02f65160e14ca redis:alpine "redis-server" 19小时前 已退出 (-1) 19小时前 6379/tcp k8s_podsandbox1-redis_podsan... 27.49 MB

这里,--sort=names告诉Podman按容器的名称对输出进行排序。同样,SIZE列显示了每个容器的大小。

列出所有由非Podman工具创建的外部容器。

podman ps --external -a
容器ID 镜像 命令 创建时间 状态 端口 名称
69ed779d8ef9f redis:alpine "redis-server" 25小时前 已创建 6379/tcp k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1
38a8a78596f9 docker.io/library/busybox:latest buildah 2小时前 存储状态 busybox-working-container
fd7b786b5c32 docker.io/library/alpine:latest buildah 2小时前 存储状态 alpine-working-container
f78620804e00 scratch buildah 2小时前 存储状态 working-container

ps

通过 podman ps 命令,开发者可以轻松地查看和管理容器,从而更好地监控应用程序的运行状态和性能。无论是在开发、测试还是生产环境中,这个命令都是容器化应用中不可或缺的一部分。

另请参阅

podman(1), buildah(1), crio(8)

历史

2017年8月,最初由Urvashi Mohnani编译