在使用docker命令的过程中,有时候输出结果冗长,有时候只想输出自己关心的部分,所有需要对输出进行过滤或自定输出内容。下面就使用docker ps
和docker inspect
命令进行示例。
1 docker ps
对于docker ps
命令用于输出控制的常用参数如下:
- –filter, -f: Filter output based on conditions provides
- –format : Pretty-print containers using a Go template
1.1 filter使用示例
--filter
使用格式为key=value
。比如--filter "foo=bar" --filter "bif=baz"
当前支持过滤的key如下
- id
- name
- label
- exited
- status
- ancestor
before
orsince
- volume
- network
publish
orexpose
- health
- isolation
- is-tasks
按退出状态过滤
$ 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 : 容器的ID
- .Image : 镜像的ID
- .Command : Quoted command
- .CreateAt : Time when the container was created
- .RunningFor : Elapsed time since the container was started
- .Ports : exposed ports
- .State : Container status (for example; “created”, “running”, “exited”).
- .Status Container status with details about duration and health-status.
- .Size Container disk size.
- .Names Container names.
- .Labels All labels assigned to the container.
- .Label Value of a specific label for this container. For example ‘’
- .Mounts Names of the volumes mounted in this container.
- .Networks Names of the networks attached to this container.
示例如下 输出容器的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
- https://docs.docker.com/engine/reference/commandline/ps/
- https://docs.docker.com/engine/reference/commandline/inspect/