【问题标题】:get label value from docker inspect [duplicate]从 docker 检查获取标签值 [重复]
【发布时间】:2016-04-06 01:18:49
【问题描述】:

由于键有“。”,我无法从地图列表中获取值。里面。

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 地图[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>

【问题讨论】:

    标签: docker docker-compose jq


    【解决方案1】:

    您可以使用index 获取该键的值(为便于阅读而包装);

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

    这应该会给你项目的名称

    【讨论】:

    • FWIW 我在 PowerShell 中尝试了这个,并且必须在内部双引号前添加反引号 (`) 字符才能正确转义。 \`"com.docker.compose.project\`"
    • 将示例更改为使用单引号作为外引号,这应该也可以,然后不需要转义(未在 PowerShell 上尝试过)
    • 尝试在 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 失败,我做错了什么?跨度>
    【解决方案2】:

    您可以将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吗?
    • 当然,在 jq 中使用 -r 标志。
    • 谢谢@SantiagoLapresta @larsks。我直接用-r 更新答案。
    猜你喜欢
    • 2017-01-02
    • 2021-11-14
    • 2017-05-11
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多