【发布时间】:2021-09-25 15:08:19
【问题描述】:
我正在使用 Docker 构建我的产品环境,并希望确保我的秘密和密钥是安全的。为此,我想使用 .env 文件。为方便起见,我想避免处理 Docker 机密。
对于本地开发,我使用的是 OpenFaas,这需要将映像推送到 Docker Hub 以与 k3s OpenFaas 一起使用。我担心 Docker Hub 映像可能包含与 docker-compose.yaml 一起使用的 .env 文件中的变量。
环境变量是否包含在 Docker Hub 映像存储库中?
docs 和 This stack overflow response 建议环境变量仅在“运行时”使用,我理解这意味着它们不包括在内。这应该意味着只有对服务器具有管理员访问权限的人才能检查图像中的秘密。我在这个假设上错了吗?我应该使用 Docker 机密吗?
21 年 8 月 19 日更新
通过测试,我更加确信 .env 变量不包含在 Docker Hub 上的映像中。注意我使用 OpenFaas faas-cli 来处理 docker 部署。为了测试这一点,我做了以下事情:
- 注释掉 .yml 文件的
environment_file:部分 - 使用
faas-cli up <functions>.yml上传镜像(这部分构建并推送docker镜像到Docker Hub仓库,然后部署OpenFaas函数) - 调用函数。该函数只返回环境变量。在 .yml 文件中“注释掉”环境变量后,函数返回“未定义”,这意味着该变量对函数不可用。
这给了我一些信心,但没有我想要的那么多,所以接下来我做了以下事情:
- 取消注释 .yml 文件的
environment_file:部分 - 运行命令
faas-cli up -f <functions>.yml --no-cache --skip-push。 - 调用函数
--no-cache 确保图像被新鲜拉出,--skip-push 跳过将 docker 图像推送到 Docker Hub 存储库的部分。因此,镜像的“构建”应该使用注释掉“environment_file”创建的镜像,但现在“运行”时在本地 .yml 文件中未注释 environment_file。
这次调用函数后,变量可用并正确返回。只要我对faas-cli 的build、push 和deploy 部分如何工作的解释是正确的,那么我相信.env 文件和变量不是Docker Hub 映像的一部分。
【问题讨论】:
标签: docker docker-compose openfaas