0

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

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

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

谢谢。

谢谢。

4

1 回答 1

1

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

安全的方式有以下三种:

  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/

于 2020-01-25T14:49:37.193 回答