微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 docker buildkit 中使用秘密标志的正确方法

如何解决在 docker buildkit 中使用秘密标志的正确方法

我正在努力解决 Gavin 提到的同样问题 this question

特别是在新 docker build secret information

使用该功能的正确方法是什么?

在互联网上环顾四周,我只在上面提到的 docker 文档中发现了相同示例的一些变体,它在构建时打印了秘密。也许我没有完全理解这个例子,所以请帮助我。

如果无法在构建时获取秘密,请在 Dockerfile 的另一部分(例如 ARG 变量或 RUN 命令)中使用,何时以及如何使用该新功能来真正保护我的秘密安全以及工作吗?

我的目标是在构建时使用这个新功能,并确保我的秘密信息安全,以防有人获取我的图像文件并对其执行历史记录。

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

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?