docker ps

命令

docker ps

描述

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

帮助

[root@ceph0 ~]# 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

选项

  • -a, –all=false

列出所有状态容器,不带-a则输出当前正在运行的容器。容器状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)。

  • -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 |

  • –format string

指定返回值的模板文件

  • -n, –last int

列出最近创建的n个容器

  • -l, –latest=false

列出最后创建的容器包含停止的容器

  • –no-trunc 不截断输出

  • -q, –quiet=false 静默模式,只显示容器编号

  • -s, –size 显示总的文件大小

示例

  • 显示当前运行中的容器

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