如何解决在 docker buildkit 中使用秘密标志的正确方法
我正在努力解决 Gavin 提到的同样问题 this question。
特别是在新 docker build secret information
在互联网上环顾四周,我只在上面提到的 docker 文档中发现了相同示例的一些变体,它在构建时打印了秘密。也许我没有完全理解这个例子,所以请帮助我。
如果无法在构建时获取秘密,请在 Dockerfile 的另一部分(例如 ARG 变量或 RUN 命令)中使用,何时以及如何使用该新功能来真正保护我的秘密安全以及工作吗?
我的目标是在构建时使用这个新功能,并确保我的秘密信息安全,以防有人获取我的图像文件并对其执行历史记录。
FROM influxdb:2.0
ENV DOCKER_INFLUXDB_INIT_MODE=setup
ENV DOCKER_INFLUXDB_INIT_USERNAME=admin
ENV DOCKER_INFLUXDB_INIT_PASSWORD="mypassword"
我如何使用 docker 文档中提到的新功能来设置我的变量 (DOCKER_INFLUXDB_INIT_PASSWORD),例如,以一种不会记录在图像历史记录中的方式?
提前致谢
解决方法
我如何使用 docker 文档中提到的新功能来 例如,以某种方式设置我的变量 (DOCKER_INFLUXDB_INIT_PASSWORD) 它不会登录图像历史记录?
这取决于您是仅在构建时需要该密钥,还是 您是否真的想在运行时使用它。后一种情况 可能更常见,并且已经有一个规范的解决方案:
如果您想将 DOCKER_INFLUXDB_INIT_PASSWORD
保留在您的图片之外
历史,只是不要在构建过程中设置它。要求它是
设置运行时,例如,通过 -e VAR=VALUE
参数为 docker run
(或 --env-file
选项):
docker run -e DOCKER_INFLUXDB_INIT_PASSWORD=mypassword myimage
你可以有一个 ENTRYPOINT
脚本来检查变量在
如果未设置,运行时并退出并显示有用的错误消息。
用于诸如 MySQL 和 PostgreSQL 之类的官方 Docker 镜像可以工作 这样。
相比之下,构建机密仅用于 构建时需要。例如,假设您的构建过程 需要做这样的事情:
RUN curl -o /data/mydataset -u username:password \
https://example.com/dataset
您想与以下人员分享您的 Dockerfile
和相关来源
其他人,但您不想共享您的用户名和密码。
这就是构建秘密的用武之地。你会坚持你的
文件中的身份验证信息,并将您的 Dockerfile
修改为
从秘密中读取该信息:
RUN --mount=type=secret,id=mysecret \
curl -o /data/mydataset -u $(cat /run/secrets/mysecret) \
https://example.com/dataset
在这个例子中,一旦我们将远程文件复制到图像中, 我们已经完成了秘密:我们不需要它来运行 图像中的容器;仅在构建期间才需要 过程。
注意:以上假设您按照 the documentation 中所述在构建时提供机密,因此您的构建命令可能类似于:
DOCKER_BUILDKIT=1 docker build --secret id=mysecret,src=mysecret.txt -t myimage .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。