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

标签 bash docker dockerfile

我正在尝试了解是否可以使用 bash 脚本读取容器的元数据(尤其是标签)属性。

例如,如果有一个像这样的 Dockerfile:

FROM busybox
LABEL abc = abc_value1

而且,如果我根据上面的文件构建并运行镜像,如下所示:

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

有什么方法可以访问 bash shell 中“abc”标签的值吗?如果有,怎么做?

最佳答案

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

说了这么多——这不是很安全,环境变量可能是更好的选择。

关于bash - 如何从容器内运行的脚本访问 docker 容器的元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439887/

相关文章:

bash - 将单列文件转换为多列

bash - 在不重新启动 xterm 的情况下重新加载 .Xresources

python - 如何正确导入 Azure SDK for Python 3.6

java - 如何处理配置/属性文件中的密码

docker - 如何运行一个接受多个用户完整输入的 bash 脚本,作为 dockerfile 的一部分

python - 在 Linux 启动时运行 python3 应用程序

docker - CentOS 7.5上是否可以使用docker存储驱动程序overlay2生产?

proxy - 如何使用代理进行 docker-compose pip install ?

docker - 如何从 docker volume 中删除数据?

regex - grep/egrep 星号运算符不匹配所有出现的情况