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 过滤基于容器的基础镜像进行过滤,或者说过滤出基于某个镜像创建的容器。过滤内容是
- image
- image:tag
- image:tag@digest
- short-id
- 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