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

时间:2020-01-25 13:42:12

标签: docker docker-compose secretsmanager

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

但是 docker history --no-trunc 之类的命令将在日志中显示密码。有什么体面的方法可以解决这个问题。目前,我不在使用kubernetes。因此,需要在docker本身中处理相同的问题。

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

谢谢。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

有三种安全的方法:

  1. 在Docker构建之外预先下载所有代码,您可以在其中访问机密,然后只需在下载的内容中进行COPY。

  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/

相关问题