【问题标题】:Do Docker Hub image repositories contain the environment variables from .env file?Docker Hub 映像存储库是否包含来自 .env 文件的环境变量?
【发布时间】:2021-09-25 15:08:19
【问题描述】:

我正在使用 Docker 构建我的产品环境,并希望确保我的秘密和密钥是安全的。为此,我想使用 .env 文件。为方便起见,我想避免处理 Docker 机密。

对于本地开发,我使用的是 OpenFaas,这需要将映像推送到 Docker Hub 以与 k3s OpenFaas 一起使用。我担心 Docker Hub 映像可能包含与 docker-compose.yaml 一起使用的 .env 文件中的变量。

环境变量是否包含在 Docker Hub 映像存储库中?

docsThis stack overflow response 建议环境变量仅在“运行时”使用,我理解这意味着它们不包括在内。这应该意味着只有对服务器具有管理员访问权限的人才能检查图像中的秘密。我在这个假设上错了吗?我应该使用 Docker 机密吗?


21 年 8 月 19 日更新

通过测试,我更加确信 .env 变量不包含在 Docker Hub 上的映像中。注意我使用 OpenFaas faas-cli 来处理 docker 部署。为了测试这一点,我做了以下事情:

  1. 注释掉 .yml 文件的 environment_file: 部分
  2. 使用faas-cli up <functions>.yml上传镜像(这部分构建并推送docker镜像到Docker Hub仓库,然后部署OpenFaas函数)
  3. 调用函数。该函数只返回环境变量。在 .yml 文件中“注释掉”环境变量后,函数返回“未定义”,这意味着该变量对函数不可用。

这给了我一些信心,但没有我想要的那么多,所以接下来我做了以下事情:

  1. 取消注释 .yml 文件的 environment_file: 部分
  2. 运行命令faas-cli up -f <functions>.yml --no-cache --skip-push
  3. 调用函数

--no-cache 确保图像被新鲜拉出,--skip-push 跳过将 docker 图像推送到 Docker Hub 存储库的部分。因此,镜像的“构建”应该使用注释掉“environment_file”创建的镜像,但现在“运行”时在本地 .yml 文件中未注释 environment_file。

这次调用函数后,变量可用并正确返回。只要我对faas-clibuildpushdeploy 部分如何工作的解释是正确的,那么我相信.env 文件和变量不是Docker Hub 映像的一部分。

【问题讨论】:

    标签: docker docker-compose openfaas


    【解决方案1】:

    如果您使用 docker-compose 制作图像(出于某种奇怪的原因),则有两种方法可以传递变量。

    将它们直接传递到 docker-compose 并指向包含变量的文件。

    正如您所说,在这两种情况下,变量都是在运行时传递的。这意味着如果您使用变量文件,运行容器的人必须在他们的系统上拥有该文件,如果您将其直接传递到 docker compose 中,则必须在运行 docker 映像时再次传递这些变量。 (他们需要将它与docker run 命令一起传递)

    【讨论】:

    • 您似乎在说 .env 文件和变量不是图像的一部分,但我不确定我是否理解正确。它们是否在 Docker Hub 上托管的映像中?
    • 抱歉回复晚了,是的,这就是我的想法和想说的。最好的查看方式是将测试图像上传到 docker hub,其中包含测试变量。当您这样做时,将图像拉到本地计算机并测试以查看测试变量是否存在。这样会更快,而不是等待我回复。
    • 我采纳了您的建议并进行了一些测试,但您的建议有所不同。似乎当我“构建”时是应用 .yml 文件的“environment_file”部分时,使用已上传到 Docker Hub 的任何图像。尽管如此,我还是想在文档中的某个地方看到,或者更合理地解释环境文件和机密是否存在于 Docker Hub 映像中。
    • 是的,我理解您的担忧,当我研究一个主题时,我希望看到文档中也描述了我的问题。但是,由于目前您似乎无法为您的问题找到任何可靠的来源,我建议您相信自己。您从测试中看到图像中不存在变量,这应该是一个标志。无论如何,祝你在未来的研究中好运,我希望我能对任何事情有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2022-11-03
    • 2017-12-29
    • 2017-06-12
    相关资源
    最近更新 更多