Docker ps 命令的有用示例

您使用的第一个 Docker 命令之一是 docker ps 命令。 它显示了正在运行的容器:

docker ps

实际上,运行此命令会为您提供正在运行的容器列表及其唯一的容器 ID、映像名称、它正在执行的命令、它运行以来的时间(正常运行时间)以及它正在使用的端口。

但是你可以用它做更多的事情。 您可以显示已停止的容器、过滤结果或仅显示容器 ID。

让我们更详细地看一下这个必不可少的 Docker 命令。

docker ps 命令

Docker 有一个别名来显示所有使用 POSIX 友好命名约定的正在运行的容器。

那就是 ps Docker 中的子命令。 它是一个别名 docker container ls. 您可以猜到,它用于列出 docker 容器。

这是一个 example 执行的 docker ps 在我的电脑上:

$ docker ps 
CONTAINER ID   IMAGE                              COMMAND                  CREATED          STATUS                       PORTS                                   NAMES
58c7013a49c3   nextcloud                          "/entrypoint.sh apac…"   32 seconds ago   Up 31 seconds                0.0.0.0:8010->80/tcp, :::8010->80/tcp   nextcloud_server
140161b8b139   mariadb                            "docker-entrypoint.s…"   34 seconds ago   Up 32 seconds                3306/tcp                                nextcloud_db
73a6901a4846   lscr.io/linuxserver/transmission   "/init"                  17 minutes ago   Exited (137) 9 minutes ago                                           transmission_web

如您所见,此命令显示有关所有正在运行的容器的详细信息。

显示的详细信息是容器的唯一 ID、映像的名称、容器正在执行的命令、容器的创建日期、正常运行时间、映射的端口和容器名称。

作为系统管理员,您经常会在脚本中使用此命令。 Docker 提供了一些在您运行时可能会有所帮助的选项 docker ps 在脚本中。

显示所有容器(不仅仅是正在运行的容器)

作为 UNIX ps 命令用于显示进程(正在执行的程序),Docker 的行为类似。

跑步 docker ps 只会显示活动的 docker 容器。

如果你停止一个正在运行的容器,它仍然存在,只是它不再运行了。

要查看处于停止状态的容器,请使用 --all (或者 -a) 选项像这样:

docker ps --all

我停止了容器 transmission_web. 让我们看看我在输出中得到了什么。

$ docker ps -a
CONTAINER ID   IMAGE                              COMMAND                  CREATED          STATUS                       PORTS                                   NAMES
58c7013a49c3   nextcloud                          "/entrypoint.sh apac…"   32 seconds ago   Up 31 seconds                0.0.0.0:8010->80/tcp, :::8010->80/tcp   nextcloud_server
140161b8b139   mariadb                            "docker-entrypoint.s…"   34 seconds ago   Up 32 seconds                3306/tcp                                nextcloud_db
73a6901a4846   lscr.io/linuxserver/transmission   "/init"                  17 minutes ago   Exited (137) 9 minutes ago                                           transmission_web

如您所见, -a 选项还显示一个已停止的容器。

过滤 docker ps 的输出以获得更准确的结果

docker ps command 有一个非常有用的选项, --filter (或者 -f 简称)。

从选项名称可以看出,您可以使用以下字段过滤掉容器:

  • id
  • name
  • label
  • exited
  • status
  • ancestor
  • since
  • volume
  • publish
  • health
  • isolation

我创建了一个名为 nextcloud_server. 我想查看有关容器的详细信息,但只查看具有我要查找的名称的容器。 让我们看看如何使用 name 筛选。

$ docker ps --filter "name=nextcloud_server"
CONTAINER ID   IMAGE       COMMAND                  CREATED       STATUS       PORTS                                   NAMES
58c7013a49c3   nextcloud   "/entrypoint.sh apac…"   3 hours ago   Up 3 hours   0.0.0.0:8010->80/tcp, :::8010->80/tcp   nextcloud_server

我有几个容器正在运行,但使用 name 过滤器只向我显示与名称匹配的容器。

让我们尝试使用 id 筛选。 我有一个 ID 为“140161b8b139”的 MariaDB 容器。 我将使用以下命令来实现这一点。

$ docker ps --filter "id=140161b8b139"
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS      NAMES
140161b8b139   mariadb   "docker-entrypoint.s…"   15 hours ago   Up 15 hours   3306/tcp   nextcloud_db

简单的! 我得到了具有匹配 ID 的容器。

按照容器的创建顺序显示容器

是的,您可以使用 --latest (或者 l 简称)。

该顺序在顶部是最新的,在底部是最旧的​​。

这是运行命令的示例输出 docker ps --latest 在我的电脑上:

$ docker ps --latest
CONTAINER ID   IMAGE                              COMMAND                  CREATED        STATUS                      PORTS                                   NAMES
58c7013a49c3   nextcloud                          "/entrypoint.sh apac…"   15 hours ago   Up 15 hours                 0.0.0.0:8010->80/tcp, :::8010->80/tcp   nextcloud_server
73a6901a4846   lscr.io/linuxserver/transmission   "/init"                  16 hours ago   Exited (137) 16 hours ago                                           transmission_web

这个命令有一些陷阱。

  • 不会列出任何用作“依赖项”的容器
  • 输出包括所有容器状态(这意味着即使是停止的容器也会被列出)

我创建了容器“nextcloud_server”,并将 MariaDB 作为其“依赖项”。 这样容器在使用时不会在输出中列出 --latest 旗帜。

脚本多吗? 仅显示容器 ID

假设您正在编写一个脚本并且只想处理容器 ID,以便您可以对容器执行操作。 为此,您可以使用 --quiet (或者 -q 简称)选项。

下面给出的是运行的输出 docker ps -q 在我的电脑上。

$ docker ps -q
58c7013a49c3
140161b8b139

如您所见,输出仅包含容器 ID(正在运行的容器),没有其他内容。

如您所见,Docker ps 命令不仅仅是显示正在运行的容器信息。 让我知道您是否学到了一些新东西或者您是否知道其他有用的东西 example 的 docker ps 命令。