在不使用 docker swarm 的情况下处理 docker 容器内的秘密

Handling secrets inside docker container without using docker swarm

一个问题,你如何在不使用 docker swarm 的情况下处理 docker 文件中的秘密。比方说,您在 npm 上有一些私有存储库,并通过提供凭据在 docker 文件中使用 .npmrc 恢复相同的存储库。包还原后,显然我要从容器中删除 .npmrc 文件。同样,它也适用于 NuGet.config 以及恢复容器内的私有存储库。目前,我在构建 docker 文件时将这些凭据作为 --build-arg 提供。

但是像 docker history --no-trunc 这样的命令会在日志中显示密码。有没有什么体面的方法来处理这个问题。目前,我不在 kubernetes 上。因此,需要在 docker 本身中处理相同的内容。

我能想到的一种方法是安装 /run/secrets/ 并通过使用一些包含密码的文本文件或通过 .env 文件将其存储在内部。但是,这个 .env 文件必须是管道的一部分才能完成 CI/CD 过程,这意味着它必须是源代码管理的一部分。有什么办法可以避免这种情况,或者可以通过管道本身完成某些事情,或者可以在此处应用任何类型的 encryption/decryption 逻辑?

谢谢。

谢谢。

首先,请记住,在一层中删除的文件仍然存在于之前的层中。所以删除文件也无济于事。

三种方式是安全的:

  1. 提前下载 Docker 构建之外的所有代码,在那里你可以访问秘密,然后只需复制你下载的内容。

  2. 使用 BuildKit,这是一项实验性 Docker 功能,可以安全方式启用机密 (https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information)。

  3. 在本地(例如在另一个容器中)从网络服务器 运行 提供机密信息。有关如何执行此操作的详细说明,请参见此处:https://pythonspeed.com/articles/docker-build-secrets/