1

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

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

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

文档和此堆栈溢出响应表明环境变量仅在“运行时”使用,我理解这意味着它们不包括在内。这应该意味着只有对服务器具有管理员访问权限的人才能检查图像中的秘密。我在这个假设上错了吗?我应该使用 Docker 机密吗?


21 年 8 月 19 日更新

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

于 2021-07-17T16:08:54.460 回答