各种码头工人检查的例子
我发现 docker inspect
文档中的示例看起来很神奇,但不能解释太多。
Docker 检查非常重要,因为它是从正在运行的容器 docker inspect -f ... container_id
中提取信息的简洁方法
(或所有正在运行的容器)
docker inspect -f ... $(docker ps -q)
避免一些不可靠的
docker command | grep or awk | tr or cut
当你启动 docker inspect
时,你可以轻松地从顶级获取值,使用基本语法,例如,对于运行 htop 的容器(来自 https://hub.docker.com/r/jess/htop/) ,一个 pid ae1
docker inspect -f '{{.Created}}' ae1
能表现出来
2016-07-14T17:44:14.159094456Z
要么
docker inspect -f '{{.Path}}' ae1
能表现出来
htop
现在,如果我提取我的 docker inspect
的一部分
我知道了
"State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4525, "ExitCode": 0, "Error": "", "StartedAt": "2016-07-14T17:44:14.406286293Z", "FinishedAt": "0001-01-01T00:00:00Z"
所以我得到一本字典,因为它有 { ...}
和很多关键:值
所以命令
docker inspect -f '{{.State}}' ae1
将返回一个列表,例如
{running true false false false false 4525 0 2016-07-14T17:44:14.406286293Z 0001-01-01T00:00:00Z}
我可以轻松获得 State.Pid 的值
docker inspect -f '{{ .State.Pid }}' ae1
我明白了
4525
有时 docker inspect 会给出一个列表,因为它以 [
开头并以 ]
结束
另一个例子,另一个容器
docker inspect -f ‘{{ .Config.Env }}’ 7a7
给
[DISPLAY=:0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LANG=fr_FR.UTF-8 LANGUAGE=fr_FR:en LC_ALL=fr_FR.UTF-8 DEBIAN_FRONTEND=noninteractive HOME=/home/gg WINEARCH=win32 WINEPREFIX=/home/gg/.wine_captvty]
为了获得列表的第一个元素,我们在必需字段之前添加索引,在之后添加 0(作为第一个元素),所以
docker inspect -f ‘{{ index ( .Config.Env) 0 }}’ 7a7
给
DISPLAY=:0
我们使用相同的语法获得 1 而不是 0 的下一个元素
docker inspect -f ‘{{ index ( .Config.Env) 1 }}’ 7a7
给
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
我们可以得到这个列表的元素数量
docker inspect -f ‘{{ len .Config.Env }}’ 7a7
给
9
我们可以得到列表的最后一个元素,语法并不容易
docker inspect -f “{{ index .Config.Cmd $[$(docker inspect –format ‘{{ len .Config.Cmd }}’ $CID)-1]}}” 7a7