如何从容器内运行的脚本访问docker容器的元数据?

21

我想了解是否可以使用bash脚本读取容器的元数据属性(特别是标签)。

例如,如果有一个Dockerfile如下:

FROM busybox
LABEL abc = abc_value1

如果我根据上面的文件构建并运行一个镜像,就像这样:

docker build . -t image1
docker run -ti image1 /bin/bash

有没有办法在bash shell中访问“abc”标签的值?如果有,该怎么做?

1个回答

19
要获取标签(以及来自远程API的任何内容),您可以将套接字传递到容器中,并在容器内使用curl >= 7.40(它是支持--unix-socket标志的最低版本)通过套接字访问远程API: Dockerfile:
FROM ubuntu:16.04 
RUN apt-get update \
    && apt-get install curl -y
LABEL abc = abc_value1

构建和运行

docker build -t image1 .
docker run -v /var/run/docker.sock:/var/run/docker.sock -it image1 /bin/bash

从容器内部

curl --unix-socket /var/run/docker.sock http:/containers/$(hostname)/json

从这里开始,你将得到一个庞大的JSON块(类似于docker inspect)。然后,你可以使用像jq这样的CLI工具来提取标签。
在docker的网站上查看更多信息:https://docs.docker.com/engine/reference/api/docker_remote_api/#/docker-remote-api 所有这些都说了——这并不是非常安全,环境变量可能是更好的选择。

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