vlambda博客
学习文章列表

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

转载请复制本声明!

 

编辑:漫谈君 

来源链接:https://www.wljslmz.cn/11017.html

您使用的第一个 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(正在运行的容器),没有其他内容。