背景说明
Docker —format 参数提供了基于 Go模板 的日志格式化输出辅助功能,并提供了一些内置的增强函数,例如如下命令
[root@template ~]# docker versionClient: Docker Engine - CommunityVersion: 20.10.14API version: 1.41Go version: go1.16.15Git commit: a224086Built: Thu Mar 24 01:49:57 2022OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.14API version: 1.41 (minimum version 1.12)Go version: go1.16.15Git commit: 87a90dcBuilt: Thu Mar 24 01:48:24 2022OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.5.11GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8runc:Version: 1.0.3GitCommit: v1.0.3-0-gf46b6badocker-init:Version: 0.19.0GitCommit: de40ad0[root@template ~]#
则可以使用--format进行定义JSON输出
[root@template ~]# docker version --format='{{json .}}'{"Client":{"Platform":{"Name":"Docker Engine - Community"},"Version":"20.10.14","ApiVersion":"1.41","DefaultAPIVersion":"1.41","GitCommit":"a224086","GoVersion":"go1.16.15","Os":"linux","Arch":"amd64","BuildTime":"Thu Mar 24 01:49:57 2022","Context":"default","Experimental":true},"Server":{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"20.10.14","Details":{"ApiVersion":"1.41","Arch":"amd64","BuildTime":"Thu Mar 24 01:48:24 2022","Experimental":"false","GitCommit":"87a90dc","GoVersion":"go1.16.15","KernelVersion":"3.10.0-957.el7.x86_64","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.5.11","Details":{"GitCommit":"3df54a852345ae127d1fa3092b95168e4a88e2f8"}},{"Name":"runc","Version":"1.0.3","Details":{"GitCommit":"v1.0.3-0-gf46b6ba"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"20.10.14","ApiVersion":"1.41","MinAPIVersion":"1.12","GitCommit":"87a90dc","GoVersion":"go1.16.15","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.el7.x86_64","BuildTime":"2022-03-24T01:48:24.000000000+00:00"}}[root@template ~]# docker version --format='{{json .}}' | jq .{"Client": {"Platform": {"Name": "Docker Engine - Community"},"Version": "20.10.14","ApiVersion": "1.41","DefaultAPIVersion": "1.41","GitCommit": "a224086","GoVersion": "go1.16.15","Os": "linux","Arch": "amd64","BuildTime": "Thu Mar 24 01:49:57 2022","Context": "default","Experimental": true},"Server": {"Platform": {"Name": "Docker Engine - Community"},"Components": [{"Name": "Engine","Version": "20.10.14","Details": {"ApiVersion": "1.41","Arch": "amd64","BuildTime": "Thu Mar 24 01:48:24 2022","Experimental": "false","GitCommit": "87a90dc","GoVersion": "go1.16.15","KernelVersion": "3.10.0-957.el7.x86_64","MinAPIVersion": "1.12","Os": "linux"}},{"Name": "containerd","Version": "1.5.11","Details": {"GitCommit": "3df54a852345ae127d1fa3092b95168e4a88e2f8"}},{"Name": "runc","Version": "1.0.3","Details": {"GitCommit": "v1.0.3-0-gf46b6ba"}},{"Name": "docker-init","Version": "0.19.0","Details": {"GitCommit": "de40ad0"}}],"Version": "20.10.14","ApiVersion": "1.41","MinAPIVersion": "1.12","GitCommit": "87a90dc","GoVersion": "go1.16.15","Os": "linux","Arch": "amd64","KernelVersion": "3.10.0-957.el7.x86_64","BuildTime": "2022-03-24T01:48:24.000000000+00:00"}}[root@template ~]#
仅输出版本信息
[root@template ~]# docker version --format='{{ .Client.Version }}'20.10.14[root@template ~]#
解决方案
镜像输出
[root@template docker]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest beae173ccac6 3 months ago 1.24MBnginx latest 605c77e624dd 3 months ago 141MB[root@template docker]#[root@template docker]# docker images --format '{{ json . }}'| jq .{"Containers": "N/A","CreatedAt": "2021-12-31 03:19:41 +0800 CST","CreatedSince": "3 months ago","Digest": "<none>","ID": "beae173ccac6","Repository": "busybox","SharedSize": "N/A","Size": "1.24MB","Tag": "latest","UniqueSize": "N/A","VirtualSize": "1.24MB"}{"Containers": "N/A","CreatedAt": "2021-12-30 03:28:29 +0800 CST","CreatedSince": "3 months ago","Digest": "<none>","ID": "605c77e624dd","Repository": "nginx","SharedSize": "N/A","Size": "141MB","Tag": "latest","UniqueSize": "N/A","VirtualSize": "141.5MB"}
这里针对常用需求进行格式拼装
"table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"
命令执行验证
[root@template docker]# docker images --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"REPOSITORY:TAG IMAGE ID CREATED ATbusybox:latest beae173ccac6 2021-12-31 03:19:41 +0800 CSTnginx:latest 605c77e624dd 2021-12-30 03:28:29 +0800 CST[root@template docker]#
容器输出
首先运行一个容器
[root@template ~]# docker container run -d nginxd91aa5eac508bcd9ba44371dce3415bda6f3d9baaf15112cac611791ab877a9f
查看容器实例
[root@template ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd91aa5eac508 nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 80/tcp blissful_darwin[root@template ~]# docker ps --format '{{json .}}' |jq .{"Command": "\"/docker-entrypoint.…\"","CreatedAt": "2022-04-09 05:49:13 +0800 CST","ID": "d91aa5eac508","Image": "nginx","Labels": "maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>","LocalVolumes": "0","Mounts": "","Names": "blissful_darwin","Networks": "bridge","Ports": "80/tcp","RunningFor": "11 minutes ago","Size": "1.09kB (virtual 141MB)","State": "running","Status": "Up 11 minutes"}[root@template ~]#
这里针对常用需求进行格式拼装
"table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"
命令执行验证
[root@template ~]# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"CONTAINER ID NAMES IMAGE NETWORKS STATUS PORTSd91aa5eac508 blissful_darwin nginx bridge Up 15 minutes 80/tcp[root@template ~]#
容器主机
[root@template ~]# docker inspect --format "{{println}}{{.Name}} {{.Config.Image}} {{.Config.Hostname}} {{.NetworkSettings.IPAddress}} {{.NetworkSettings.Ports}} {{.Args}}{{println}}" $(docker ps -q)/blissful_darwin nginx d91aa5eac508 172.17.0.2 map[80/tcp:[]] [nginx -g daemon off;][root@template ~]#
别名汇总
alias docker-img='docker images --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}"'alias docker-ps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Status}}\t{{.Ports}}"'alias docker-ip='docker inspect --format "{{println}}{{.Name}} {{.Config.Image}} {{.Config.Hostname}} {{.NetworkSettings.IPAddress}} {{.NetworkSettings.Ports}} {{.Args}}{{println}}" $(docker ps -q)'
