命令

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挂载点进行过滤。例如:
{% raw %}

{% endraw %}$ 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

{% raw %}``` {% endraw %}

  • 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的方式进行过滤 {% raw %}


{% endraw %}$ 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

{% raw %}```
{% endraw %}

- 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,例如:'{% raw %}{{.Label "com.docker.swarm.cpu"}}{% endraw %}' |
| .Mounts | 容器的volume挂载点 |
|.Networks  | 该容器连接的网络 |

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

{% endraw %}$ 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

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

{% endraw %}$ 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该文件修订时间: 2020-09-13 09:15:45

results matching ""

    No results matching ""