1、Inspect结果详细信息

docker inspect 7988f914a122

其中7988f914a122是某一容器进程的id

{"Id": "7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70","Created": "2017-02-07T05:04:30.305563148Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 19138,"ExitCode": 0,"Error": "","StartedAt": "2017-02-07T08:11:55.171653409Z","FinishedAt": "2017-02-07T06:20:22.462071105Z"},"Image": "sha256:93541fa8323099b6be585526fac694ac52063aba1830d6e1e9961594e43f8b88","ResolvConfPath": "/var/lib/docker/containers/7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70/resolv.conf","HostnamePath": "/var/lib/docker/containers/7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70/hostname","HostsPath": "/var/lib/docker/containers/7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70/hosts","LogPath": "/var/lib/docker/containers/7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70/7988f914a122197035d687eebe0c9e31d69f84bb7b14d976a3fbb030d4d98f70-json.log","Name": "/newtomcat7","RestartCount": 0,"Driver": "aufs","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": ["/root/work/docker:/root/hzbtest"],"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {"5000/tcp": [{"HostIp": "","HostPort": "5000"}]},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": null,"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DiskQuota": 0,"KernelMemory": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": -1,"OomKillDisable": false,"PidsLimit": 0,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0},"GraphDriver": {"Name": "aufs","Data": null},"Mounts": [{"Source": "/root/work/docker","Destination": "/root/hzbtest","Mode": "","RW": true,"Propagation": "rprivate"}],"Config": {"Hostname": "7988f914a122","Domainname": "","User": "","AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"ExposedPorts": {"5000/tcp": {}},"Tty": true,"OpenStdin": true,"StdinOnce": true,"Env": null,"Cmd": ["/bin/bash"],"Image": "93541fa83230","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {}},"NetworkSettings": {"Bridge": "","SandboxID": "927b5aac94a952453bce87bbb346b3dd573f9af622c8913875ae564161ee3332","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"5000/tcp": [{"HostIp": "0.0.0.0","HostPort": "5000"}]},"SandboxKey": "/var/run/docker/netns/927b5aac94a9","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "254ea67cfdda5bcafa3504141584f6c8148449f185574bcf1facd0a925416df9","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "4d1bed26364a6c5844e0530e77b37bbe637901ef0579930da6fba5e31484aa61","EndpointID": "254ea67cfdda5bcafa3504141584f6c8148449f185574bcf1facd0a925416df9","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02"}}}}

很多 Docker 用户都知道 docker inspect 命令,该命令用于获取容器/镜像的元数据,其中 -f 参数可以用于获取指定的数据,例如使用 docker inspect -f {{.IPAddress}} 来获取容器的 IP 地址。不过很多用户容易被该特性的语法搞晕,并很少有人能将它的优势发挥出来(大部分人都是通过 grep 来获取指定数据,虽然有效但比较零散混乱)。本文将详细介绍 -f 参数,并给出一些例子来说明如何使用它。

docker inspect

简单地说,-f 的实参是个 Go 模版,并在容器/镜像的元数据上以该 Go 模版作为输入,最终返回模版指定的数据。第一个问题就是该命令说明文档中的用词“Go 模版”对于没有 Go 开发经验的人来说很模糊——我的第一感觉就是它类似恐怖的 C++ 模版。还好 Go 模版和 C++ 模版/泛型毫不相干,Go 模版是一种模板引擎,让数据以指定的模式输出。这个概念对于 Web 开发者是非常熟悉的,Web 领域有很多模版引擎,比如 Jinga2(用于 Python 和 Flask)、Mustache、JSP 等等,看下面的简单示例:

$ docker inspect -f 'Hello from container {{.Name}}' jenkins
Hello from container /jenkins

我们可以看到,-f 指定了一个简单的模式(或称之为模版)并应用于容器的元数据。当然,对于元数据,我们也可以什么都不指定:

$ docker inspect -f "This is a bit pointless" jenkins
This is a bit pointless

下面让我们来进一步看看 Go 模版的奇妙之处,例如我们可以通过模版来查找所有退出码为非 0 的容器名:

$ docker inspect -f '{{if ne 0.0 .State.ExitCode }}{{.Name}} {{.State.ExitCode}}{{ end }}' $(docker ps -aq)/tender_colden 1
/clever_mcclintock 126 /grave_bartik 1

(无论是否匹配到,对于每个容器都会输出一行)

或者在 jenkins-data 容器中查找卷 /var/jenkins_home 对应在 host 的目录:

docker inspect -f '{{index .Volumes "/var/jenkins_home"}}' jenkins-data
/var/lib/docker/vfs/dir/5a6f7b306b96af38723fc4d31def1cc515a0d75c785f3462482f60b730533b1a

上面的例子可能稍微有点难理解,不过没关系,我们先来了解一下 Go 模版的基本用法。

模版指令

{{ }} 语法用于处理模版指令,大括号外的任何字符都将直接输出。

上下文

“.” 表示“当前上下文”。大多数情况下表示了容器元数据的整个数据结构,但在某些情况下可以重新规定上下文,比如使用 with 函数:

$ docker inspect -f '{{.State.Pid}}' jenkins
6331
$ docker inspect -f '{{with .State}} {{.Pid}} {{end}}' jenkins 6331

可以使用 $ 来获取根上下文,例如:

$ docker inspect -f '{{with .State}} {{$.Name}} has pid {{.Pid}} {{end}}' jenkins/jenkins has pid 6331

注意,单独使用 “.” 本身也是可以的,将输出未格式化的完整元数据:

$ docker inspect -f '{{.}}' jenkins
...

数据类型

inspect 数据可以由浮点数、字符串和布尔组成,可以使用 Go 模版内置函数进行比较判断。虽然 Go 模版支持整数,但目前 inspect 数据中的数值类型都是浮点数,而整数应该对于大多数场景更方便(详见该Issue)。使用字符串时可以使用双引号。

数据中不存在的值是不可以用来比较的:

$ docker inspect -f '{{.ExecIDs}}' jenkins
<no value>
$ docker inspect -f '{{eq .ExecIDs .ExecIDs}}' jenkins
FATA[0000] template: :1:2: executing "" at <eq .ExecIDs .ExecIDs>: error calling eq: invalid type for comparison

数据结构

inspect 数据使用 map 以及数组保存。Map 结构非常简单,前面我们曾经展示过,可以通过 . 的链式来访问 map 内部数据:

$ docker inspect -f '{{.State.ExitCode}}' jenkins
0

不过有些情况(比如 map 的键不是字符串)是不能直接使用 . 方式来获取 map 值的,此时我们可以使用index 函数,前面卷的例子可以这样写:

docker inspect -f '{{index .Volumes "/var/jenkins_home"}}' jenkins-data
/var/lib/docker/vfs/dir/5a6f7b306b96af38723fc4d31def1cc515a0d75c785f3462482f60b730533b1a

我们也可以使用 index 来获取指定下标的数组值:

$ docker inspect -f '{{.HostConfig.Binds}}' jenkins
[/var/run/docker.sock:/var/run/docker.sock /usr/bin/docker:/usr/bin/docker] $ docker inspect -f '{{index .HostConfig.Binds 1}}' jenkins /usr/bin/docker:/usr/bin/docker

函数

除了 index  函数,其他很多函数也很常用。比如逻辑函数 andor 可以返回布尔结果。注意,函数是不能放在中间:

$ docker inspect -f '{{and true true}}' jenkins
true

而不是:

$ docker inspect -f '{{true and true}}' jenkins
FATA[0000] template: :1:2: executing "" at <true>: can't give argument to non-function true 

下面是一些常用的比较函数:

  • eq (等于)
  • ne (不等于)
  • lt (小于)
  • le (小于等于)
  • gt (大于)
  • ge (大于等于)

我们可以用这些函数来比较字符串、浮点数或整数:

$ docker inspect -f '{{eq "abc" "abc"}}' jenkins
true
$ docker inspect -f '{{ge 1 -1}}' jenkins true $ docker inspect -f '{{lt 4.5 4.6}}' jenkins true $ docker inspect -f '{{ne 4.5 4.5}}' jenkins false

要注意的是操作数类型必须匹配,数字比较时使用浮点数:

$ docker inspect -f '{{eq "4.5" 4.5}}' jenkins
FATA[0000] template: :1:2: executing "" at <eq "4.5" 4.5>: error calling eq: incompatible types for comparison $ docker inspect -f '{{gt .State.Pid 1}}' jenkins FATA[0000] template: :1:2: executing "" at <gt .State.Pid 1>: error calling gt: incompatible types for comparison $ docker inspect -f '{{gt .State.Pid 1.0}}' jenkins true

另外,可以使用 json 函数来生成 JSON 输出:

$ docker inspect -f '{{json .NetworkSettings.Ports}}' jenkins
{"50000/tcp":null,"8080/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]}

我们也可以使用 jq 工具来组合结果:

$ docker inspect -f '{{json .State}}' jenkins-data | jq '.StartedAt'
"2015-03-15T20:26:30.526796706Z"

当然,docker inspect 的默认输出结果就是 JSON,所以下面这样也可以:

$ docker inspect jenkins-data | jq '.[] | .State.StartedAt'
"2015-03-15T20:26:30.526796706Z"

更多函数请参考 Go 官方文档,不过很奇怪的是官方文档中并没有描述 json 函数(我是从 Nathan LeClaire’s blog 中学到的),你如果知道其中原因,记得告诉我!

If 语句

条件语句 if 可以和前面的比较函数一起使用:

$ docker inspect -f '{{if eq .State.ExitCode 0.0}}
Normal Exit {{else if eq .State.ExitCode 1.0}} Not a Normal Exit {{else}} Still Not a Normal Exit {{end}}' jenkins Normal Exit

注意,{{end}} 语句必须有,else if 和 else 按需使用。

转载于:https://www.cnblogs.com/boshen-hzb/p/6376674.html

Docker Inspect相关推荐

  1. docker inspect 获取 容器 镜像 元数据 简介

    目录 作用 语法格式 实际例子 获取容器 IP 获取容器 MAC 地址 获取容器日志路径 获取容器的元数据 获取镜像的元数据 作用 获取容器/镜像的元数据(JSON格式) 语法格式 docker in ...

  2. Docker inspect 命令

    docker inspect : 获取容器/镜像的元数据. 语法 docker inspect [OPTIONS] NAME|ID [NAME|ID...][OPTIONS] NAME|ID [NAM ...

  3. linux查看镜像的详细信息,docker inspect命令查看镜像详细信息

    # docker inspect ubuntu:18.04 // 查看镜像的详细信息[ {"Id": "sha256:d131e0fa2585a7efbfb187f70d ...

  4. docker inspect container_name | grep Mounts -A 20

    docker inspect container_name | grep Mounts -A 查看docker挂载目录: docker inspect jenkins_docker | grep Mo ...

  5. Docker(35)- docker inspect 命令详解

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 获取容器/镜像的元数据(J ...

  6. docker inspect -f 详解(查询在主机上的进程pid)

    转载原文链接:https://blog.csdn.net/p656456564545/article/details/51538457 https://www.jianshu.com/p/653772 ...

  7. docker inspect命令查看镜像详细信息

    docker 查看镜像日志 docker inspect --format '{{.LogPath}}' e9d2a4def21b docker inspect命令查看镜像详细信息 1 使用 insp ...

  8. docker inspect 详解

    一.功能介绍 docker inspect 会以 json 格式得到 docker 镜像/容器的元数据. 如下,查看mysql镜像的完整元数据: docker inspect mysql:5.7 [{ ...

  9. 奇妙的 Docker Inspect

    概述 很多 Docker 用户都知道 docker inspect 命令,该命令用于获取容器/镜像的元数据,其中 -f 参数可以用于获取指定的数据,例如使用 docker inspect -f {{. ...

最新文章

  1. 修改mysql参数_mysql动态修改参数
  2. 2010年上半年计算机专业技术资格考试工作安排
  3. [再寄小读者之数学篇](2014-11-19 $\sin(x+y)=\sin x\cos y+\cos x\sin y$)
  4. printf打印百分号%
  5. [转载] python迭代器、生成器和装饰器
  6. 基于数据空间的电子病历数据融合与应用平台
  7. 三星发布8nm芯片Exynos 850
  8. echarts scatter
  9. c++类的嵌套(1)
  10. r语言 append_Python爬取近十年TIOBE编程语言热度数据并可视化可视化
  11. L1-013 计算阶乘和 (10 分)—团体程序设计天梯赛
  12. vue项目小demo
  13. 嵌入式硬件入门——蜂鸣器
  14. digester java_在Digester中定位特定属性 - Java
  15. 笔记本电脑蓝牙设置开关消失不见的处理方法
  16. 离散数学学习笔记——命题逻辑
  17. 【网络安全学习实践】Windows系统密码破解防护及用户和组管理
  18. python模拟登陆抖音_抖音模拟登陆的实现
  19. Date.now()和new.Date().getTime()的区别
  20. QSSQ-Windows 10 Windows11系统版本一键切换工具

热门文章

  1. 【Linux】一步一步学Linux——fc命令(224)
  2. 可用子网数要不要减2_CCNA最实用的复习知识点(2)
  3. 行人跟踪python_使用Python为初学者构建AI汽车和行人跟踪
  4. wave文件 fft_STM32F103 如何实现 FFT?
  5. 数据结构-----红黑树的插入操作
  6. linux更改python版本链接
  7. adb启动失败 ADB server didn't ACK
  8. C#引用office库
  9. Win7环境下IPython Notebook的安装
  10. HDU Problem - 1455 Sticks