1. docker ps

1.1. 描述

docker ps 命令查看当前宿主机上容器列表。

1.2. 帮助

$ docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
  -a, --all Show all containers (default shows just running)
  -f, --filter filter Filter output based on conditions provided
      --format string Pretty-print containers using a Go template
  -n, --last int Show n last created containers (includes all states) (default -1)
  -l, --latest Show the latest created container (includes all states)
      --no-trunc Don't truncate output
  -q, --quiet Only display numeric IDs
  -s, --size Display total file sizes

1.3. 选项

选项 描述
-a, --all=false 列出所有状态容器,不带 -a 则输出当前正在运行的容器。容器状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)。
-f, --filter=[] 根据条件过滤显示的内容。
--format string 指定返回值的模板文件
-n, --last int 列出最近创建的 n 个容器
-l, --latest=false 列出最后创建的容器包含停止的容器
--no-trunc 不截断输出,输出容器的完整 ID 等信息
-q, --quiet=false 静默模式,只显示容器编号
-s, --size 显示总的文件大小

过滤条件:

-f, --filter=[] 根据条件过滤显示的内容。过滤条件的是 key=value 对的格式,如果有多个过滤条件需要多次指定参数,例如 --filter "foo=bar" --filter "foo2=bar2"

当前支持的过滤器有如下:

过滤条件 描述
id 容器的 ID
name 容器的名字
label 可以为任意的字符串组成的一个关键字 KEY 或者键值对 KEY=VALUE
exited 只在 --all 模式中过滤退出时状态码
status 过滤指定状态的容器。状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)
ancestor 过滤有相同祖先镜像的容器,一般格式是 <image-name>[:<tag>], <image id>, or <image@digest>
before or since 过滤某个容器(容器ID或名字)创建之前,或者创建之后创建的容器
volume 使用一个volumeid或者挂载点镜像过滤
network 通过网络配置进行过滤
publish or expose 通过开放的端口或者协议进行过滤,<port>[/<proto>] or <startport-endport>/[<proto>]
health 基于容器的健康状态进行过滤。状态要求是 starting/healthy/unhealthy/none其中一种
isolation 仅在Windows系统下的服务可用。要求是default/process/hyperv其中的一种
is-task Boolean值True或者False过滤一个服务是否是一个task

1.4. 示例

  • 显示当前运行中的容器

docker ps 命令默认只显示当前运行中的容器。显示所有容器时需要指定产生 -a

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp
d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db

输出解释

名称 描述
CONTAINER ID 容器 ID
IMAGE 容器运行时使用的镜像
COMMAND 启动容器时运行的命令
CREATED 容器的创建时间
STATUS 容器状态,状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)
PORTS 容器的端口信息和使用的连接类型(tcp\udp)
NAMES 自动分配的容器名称

docker ps 默认会聚合端口暴露显示的信息。例如一个容器暴露了 TCP 的端口 100/101/102,那么将会在 PORTS 列显示 100-102/tcp 。

  • 显示最后被创建的 n 个容器

这里不限状态

docker ps -n 5
  • 显示最后被创建的容器

相当于 docker ps -n 1

docker ps -l
  • 显示完整输出

即不会截断输出。该选项有点长,其中 trunc 算是 truncate 的缩写

docker ps --no-trunc
  • 显示所有状态的所有容器,且只显示容器ID
# docker ps -a -q
b1a073e41e7d
f46fb1dc520fd
a63b45597de3
6a4aaa2e947b
  • 显示容器文件大小
docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
643e145fe382 coredns "/coredns -conf /etc…" 3 weeks ago Up 3 weeks k8s_coredns_coredns-6d99995b7f-s9rcf_kube-system_7153cb3c-3d1c-11ea-94c1-fa163e95902d_0 0B (virtual 40.3MB)

该命令可以获得 2 个数值:一个是容器真实增加的大小,一个是整个容器的虚拟大小。 容器虚拟大小 = 容器真实增加大小 + 容器镜像大小 注意,该命令会统计磁盘上文件大小,会有IO请求,请求会有一定的等待

  • filter使用label过滤容器

label可以为任意的字符串组成的一个关键字KEY或者键值对KEY=VALUE。

例如,过滤label是color的容器

$ docker ps --filter "label=color"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
673394ef1d4c busybox "top" 47 seconds ago Up 45 seconds nostalgic_shockley
d85756f57265 busybox "top" 52 seconds ago Up 51 seconds high_albattani

过滤出label是color的容器,且color的值为blue的容器

$ docker ps --filter "label=color=blue"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d85756f57265 busybox "top" About a minute ago Up About a minute high_albattani
  • filter使用name过滤容器

使用filter过滤功能过滤容器名称是nostalgic_stallman的容器

$ docker ps --filter "name=nostalgic_stallman"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b6247364a03 busybox "top" 2 minutes ago Up 2 minutes nostalgic_stallman

也可以使用容器名称字符串的一部分字符进行过滤

$ docker ps --filter "name=nostalgic"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
715ebfcee040 busybox "top" 3 seconds ago Up 1 second i_am_nostalgic
9b6247364a03 busybox "top" 7 minutes ago Up 7 minutes nostalgic_stallman
673394ef1d4c busybox "top" 38 minutes ago Up 38 minutes nostalgic_shockley
  • filter使用EXITED进行容器过滤

exited是基于容器的退出状态码进行过滤的。

例如,过滤出退出时是正常退出的容器

$ docker ps -a --filter 'exited=0'
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea09c3c82f6e registry:latest /srv/run.sh 2 weeks ago Exited (0) 2 weeks ago 127.0.0.1:5000->5000/tcp desperate_leakey
106ea823fe4e fedora:latest /bin/sh -c 'bash -l' 2 weeks ago Exited (0) 2 weeks ago determined_albattani
48ee228c9464 fedora:20 bash 2 weeks ago Exited (0) 2 weeks ago tender_torvalds

过滤退出时的状态码是137,即信号量 SIGKILL(9) 的容器

$ docker ps -a --filter 'exited=137'
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3e1c0ed5bfe ubuntu:latest "sleep 1000" 12 seconds ago Exited (137) 5 seconds ago grave_kowalevski
a2eb5558d669 redis:latest "/entrypoint.sh redi 2 hours ago Exited (137) 2 hours ago sharp_lalande

137 退出码一般的情况有: 1. 通常情况下 init 进程被 killed 2. docker kill 杀死的容器 3. docker 服务进程重启时杀死的所有容器

  • filter 使用 STATUS 状态进行过滤

status 是基于容器的运行状态来进行过滤的。

状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)。

例如,过滤 running 运行中的容器

$ docker ps --filter status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
715ebfcee040 busybox "top" 16 minutes ago Up 16 minutes i_am_nostalgic
d5c976d3c462 busybox "top" 23 minutes ago Up 23 minutes top
9b6247364a03 busybox "top" 24 minutes ago Up 24 minutes nostalgic_stallman

过滤 paused(暂停)状态的容器

$ docker ps --filter status=paused
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
673394ef1d4c busybox "top" About an hour ago Up About an hour (Paused) nostalgic_shockley
  • filter 基于先祖 ancestor 容器进行过滤

ancestor 过滤基于容器的基础镜像进行过滤,或者说过滤出基于某个镜像创建的容器。过滤内容是

  1. image
  2. image:tag
  3. image:tag@digest
  4. short-id
  5. full-id

指定一个 tag 时,默认会使用 latest 最新的镜像。例如过滤使用最新版本 Ubuntu 镜像创建的容器

$ docker ps --filter ancestor=ubuntu
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
919e1179bdb8 ubuntu-c1 "top" About a minute ago Up About a minute admiring_lovelace
5d1e4a540723 ubuntu-c2 "top" About a minute ago Up About a minute admiring_sammet
82a598284012 ubuntu "top" 3 minutes ago Up 3 minutes sleepy_bose
bab2a34ba363 ubuntu "top" 3 minutes ago Up 3 minutes focused_yonath

过滤容器,基于 Ubuntu 的 tag12.04.5 版本

$ docker ps --filter ancestor=ubuntu:12.04.5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82a598284012 ubuntu:12.04.5 "top" 3 minutes ago Up 3 minutes sleepy_bose

基于 layer 层进行过滤,使用到该 layer 层的容器都会被过滤到

docker ps --filter ancestor=d0e008c6cf02
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82a598284012 ubuntu:12.04.5 "top" 3 minutes ago Up 3 minutes sleepy_bose
  • filter 基于 create 时间过滤

创建时间有 before 和 since 两种过滤方式,例如列出当前容器列表如下

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c3527ed70ce busybox "top" 14 seconds ago Up 15 seconds desperate_dubinsky
4aace5031105 busybox "top" 48 seconds ago Up 49 seconds focused_hamilton
6e63f6ff38b0 busybox "top" About a minute ago Up About a minute distracted_fermat

使用 before 进行过滤。before 过滤出给定容器创建之前的容器。

$ docker ps -f before=9c3527ed70ce

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4aace5031105 busybox "top" About a minute ago Up About a minute focused_hamilton
6e63f6ff38b0 busybox "top" About a minute ago Up About a minute distracted_fermat

使用 since 进行过滤。since 过滤出给定容器创建之后创建的容器

$ docker ps -f since=6e63f6ff38b0

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c3527ed70ce busybox "top" 10 minutes ago Up 10 minutes desperate_dubinsky
4aace5031105 busybox "top" 10 minutes ago Up 10 minutes  
  • filter 基于 volume 过滤

volume 基于指定的 volume 或者 volume 的 Mount 挂载点进行过滤。例如:

$ docker ps --filter volume=remote-volume --format "table {{.ID}}\t{{.Mounts}}"
CONTAINER ID MOUNTS
9c3527ed70ce remote-volume

$ docker ps --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}"
CONTAINER ID MOUNTS
9c3527ed70ce remote-volume
  • filter 基于 network 过滤

network 过滤出连接到指定网络上的容器列表,可以使用网络名称或者网络 ID。

列出所有连接到net1网络名的容器

$ docker run -d --net=net1 --name=test1 ubuntu top
$ docker run -d --net=net2 --name=test2 ubuntu top

$ docker ps --filter network=net1

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d4893ed80fe ubuntu "top" 10 minutes ago Up 10 minutes test1

使用ID的方式进行过滤

$ docker network inspect --format "{{.ID}}" net1

8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

$ docker ps --filter network=8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d4893ed80fe ubuntu "top" 10 minutes ago Up 10 minutes test1
  • filter 基于 publish 或 expose 进行过滤

基于 publish 开放的端口或者 expose 声明的端口,协议进行过滤。支持单个端口,一段 range 端口,和协议,默认协议是 TCP。

过滤开放端口是80的所有容器

$ docker run -d --publish=80 busybox top
$ docker run -d --expose=8080 busybox top

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9833437217a5 busybox "top" 5 seconds ago Up 4 seconds 8080/tcp dreamy_mccarthy
fc7e477723b7 busybox "top" 50 seconds ago Up 50 seconds 0.0.0.0:32768->80/tcp admiring_roentgen

$ docker ps --filter publish=80
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc7e477723b7 busybox "top" About a minute ago Up About a minute 0.0.0.0:32768->80/tcp admiring_roentgen

过滤声明协议是 TCP 且端口范围是8000-8080端口的容器

$ docker ps --filter expose=8000-8080/tcp

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9833437217a5 busybox "top" 21 seconds ago Up 19 seconds 8080/tcp dreamy_mccarthy

过滤声明的端口是 80,且协议是 UDP 的端口。如下无法获取到符合条件的容器

$ docker ps --filter publish=80/udp
CONTAINER ID IMAGE COMMAND CREATED STATUS  
  • formatting 使用 go 模板进行输出渲染

使用 --format 选项时,docker ps 会对输出的结果按照参数进行结果渲染过滤处理。

合法的参数如下

参数 描述
.ID 容器ID
.Image 镜像ID
.Command 引用的命令
.CreatedAt 容器创建的时间
.RunningFor 容器从创建到终止的时间
.Ports Exposed 的端口
.Status 容器的状态
.Size 容器的大小
.Names 容器的名称
.Labels 容器分配的所有label
.Label 指定的label,例如:'{{ .Label "com.docker.swarm.cpu" }}'
.Mounts 容器的volume挂载点
.Networks 该容器连接的网络

显示所有容器的 ID 和 Command,并且中间使用冒号进行格式排版

$ docker ps --format "{{.ID}}: {{.Command}}"
a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57: /bin/sh -c #(nop) MA

显示所有容器的 ID 和 Labels,并使用tab进行格式排版

$ docker ps --format "table {{.ID}}\t{{.Labels}}"

CONTAINER ID LABELS
a87ecb4f327c com.docker.swarm.node=ubuntu,com.docker.swarm.storage=ssd
01946d9d34d8
c1d3b0166030 com.docker.swarm.node=debian,com.docker.swarm.cpu=6
41d50ecd2f57 com.docker.swarm.node=fedora,com.docker.swarm.cpu=3,com.docker.swarm.storage=ssd
Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-03-13 11:28:02

results matching ""

    No results matching ""