您使用的第一个 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
命令。