从Docker inspect获取标签值

42

由于键名中包含字符“.”,我在从映射列表中获取值时遇到了问题。

docker inspect jenkins
  Config: {
  ..
      "Labels": {
            "com.docker.compose.config-hash": "85bcf1e0bcd708120185a303e2a8d8e65543c1ec77ec0c6762fc057dc10320aa",
            "com.docker.compose.container-number": "1",
            "com.docker.compose.oneoff": "False",
            "com.docker.compose.project": "new",
            "com.docker.compose.service": "sc2",
            "com.docker.compose.version": "1.5.2"
        }
    }
}

我可以获得地图列表

docker inspect -f {{.Config.Labels}} new_sc2_1
map[com.docker.compose.config-hash:85bcf1e0bcd708120185a303e2a8d8e65543c1ec77ec0c6762fc057dc10320aa com.docker.compose.container-number:1 com.docker.compose.oneoff:False com.docker.compose.project:new com.docker.compose.service:sc2 com.docker.compose.version:1.5.2]

但是如何从键com.docker.compose.project中获取项目名称new

docker inspect -f {{.Config.Labels.com.docker.compose.project}} new_sc2_1
<no value>
2个回答

70

你可以使用index来获取该键的值(为了可读性而包装);

docker inspect \
  --format '{{ index .Config.Labels "com.docker.compose.project"}}' \
  new_sc2_1

这应该会给你项目的名称。


3
就我所知,我在PowerShell中尝试过这个操作,必须在内部双引号前面添加反引号()字符以正确转义。\\"com.docker.compose.project\`" - devlife
将示例更改为使用单引号作为外部引号,这也应该可以工作,然后就不需要转义了(在PowerShell上没有尝试过)。 - thaJeztah
尝试在 docker-compose 中使用类似以下的记录驱动程序 loki-external-labels: container_name={{.Name}},cluster=${COMPOSE_PROJECT_NAME},service={{ index .Config.Labels 'com.docker.compose.service' }}。如果出现“loki: could not expand label value”错误,我哪里做错了? - wapmorgan

13

您可以将docker inspect的输出导入jq。假设内容如下:

...
        "Labels": {
            "com.docker.compose.config-hash": "a804d541a5828f4aaf17df862b650e58ac5bae77b70ff5ebdb2f0f3682326954",
            "com.docker.compose.container-number": "1",
            "com.docker.compose.oneoff": "False",
            "com.docker.compose.project": "postgis",
            "com.docker.compose.service": "postgis",
            "com.docker.compose.version": "1.7.0rc1"
        }
...

我可以像这样提取单个标签值:

docker inspect mycontainer |
jq -r '.[0].Config.Labels["com.docker.compose.project"]'

这让我想起了:

postgis

太好了,能否直接去掉 " 以直接获取 postgis - Larry Cai
1
当然可以,只需在 jq 中使用 -r 标志。 - user3899165
谢谢 @SantiagoLapresta @larsks。我直接用 -r 更新了答案。 - Larry Cai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接