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

时间:2016-05-25 14:17:23

标签: bash docker dockerfile

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

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

FROM busybox
LABEL abc = abc_value1

并且,如果我基于上面的文件构建并运行图像,如下所示:

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

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

1 个答案:

答案 0 :(得分:8)

要获取标签(以及远程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

所有这一切 - 这不是很安全,环境变量可能是更好的选择。