在使用docker命令的过程中,有时候输出结果冗长,有时候只想输出自己关心的部分,所有需要对输出进行过滤或自定输出内容。下面就使用docker psdocker inspect命令进行示例。

1 docker ps

对于docker ps命令用于输出控制的常用参数如下:

1.1 filter使用示例

--filter使用格式为key=value。比如--filter "foo=bar" --filter "bif=baz" 当前支持过滤的key如下

按退出状态过滤

$ docker ps -a --filter 'exited=0'
$ docker ps -a --filter 'exited=137'

按运行状态过滤

$ docker ps --filter status=running
$ docker ps --filter status=paused

按挂载卷过滤

$ docker ps --filter volume=remote-volume --format "table \t"

CONTAINER ID        MOUNTS
9c3527ed70ce        remote-volume

$ docker ps --filter volume=/data --format "table \t"

CONTAINER ID        MOUNTS
9c3527ed70ce        remote-volume

按容器映射或暴露的端口过滤

$ 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之间的容器

下面的命令会匹配映射了udp端口80的容器
```bash
$ docker ps --filter publish=80/udp

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

1.2 format使用示例

--format使用go的template格式化输出,下面的占位符在go的template中是支持的:

示例如下 输出容器的ID和运行的命令,以冒号分割

$ docker ps --format ": "

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

列出所有运行容器的label,并以表格的方式输出

$ docker ps --format "table \t"

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

2 docker inspect

docker inspect命令使用--format, -f参数来格式化输出,支持go template。示例如下:

2.1 获取容器示例的IP地址

$ docker inspect --format='' $INSTANCE_ID

2.2 获取容器的MAC地址

$ docker inspect --format='' $INSTANCE_ID

2.3 获取容器的log路径

$ docker inspect --format='' $INSTANCE_ID

2.4 获取容器的镜像名称

$ docker inspect --format='' $INSTANCE_ID

2.5 列出所有绑定端口

$ docker inspect --format='  ->  ' $INSTANCE_ID

2.6 找到特定的端口映射

当字段名称以数字开头时,.Field语法就失效了。但是template的index函数是可以的。

$ docker inspect --format='' $INSTANCE_ID

2.7 以json格式获取部分输出

$ docker inspect --format='' $INSTANCE_ID

Reference