举几个Docker ps 命令的例子,Linux运维必知!

441 阅读2分钟

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


docker ps

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

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

docker ps 命令

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

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 ps当您在脚本中运行时,Docker 提供了一些有用的选项。

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

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

运行docker ps只会显示处于活动状态的 docker 容器。

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

要查看处于停止状态的容器,请使用--all(or -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命令有一个非常有用的选项--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(正在运行的容器),没有其他内容。