Security 如何将机密数据传递到容器

Security 如何将机密数据传递到容器,security,docker,docker-compose,docker-registry,Security,Docker,Docker Compose,Docker Registry,我的Tomcat容器需要得到良好保护的数据,即数据库访问的密码,以及单次登录到其他系统的证书和密钥 我看到一些建议,可以使用-e或-env file将机密数据传递给容器,但这可以通过docker inspect发现(-env file还显示docker inspect中文件的所有属性) 另一种方法是将数据容器与服务容器的机密链接起来,但我不喜欢将此数据容器放在我的注册表中(可供更广泛的人访问)。我知道我可以建立一个私有注册中心,但是我需要不同的注册中心来进行测试和生产,而且每个有权访问生产注册中

我的Tomcat容器需要得到良好保护的数据,即数据库访问的密码,以及单次登录到其他系统的证书和密钥

我看到一些建议,可以使用
-e
-env file
将机密数据传递给容器,但这可以通过docker inspect发现(
-env file
还显示docker inspect中文件的所有属性)

另一种方法是将数据容器与服务容器的机密链接起来,但我不喜欢将此数据容器放在我的注册表中(可供更广泛的人访问)。我知道我可以建立一个私有注册中心,但是我需要不同的注册中心来进行测试和生产,而且每个有权访问生产注册中心的人都可以访问机密数据

我正在考虑为我的服务器设置一个包含机密数据的目录,并将机密数据装载到我的容器中。这将很好地与具有不同机密的测试和生产服务器配合使用。但它创建了容器对特定服务器的依赖性

所以我的问题是:如何处理机密数据,解决这个问题的最佳方案是什么?

2017年1月更新

Docker 1.13现在拥有Docker swarm的命令。
另见“”


原始答复(2015年9月)

中提到的
docker vault
的概念在中进行了积极讨论(讨论仍在继续)

目前,由于docker的工作范围之外,该文件被拒绝,但还包括:

我们为这个问题找到了一个简单的解决方案:一个bash脚本,一旦通过一个
RUN
命令执行,就会从本地HTTP服务器下载私钥,执行一个给定的命令,然后删除这些密钥

由于我们在一次
运行中完成了所有这些操作,因此图像中不会缓存任何内容。以下是它在Dockerfile中的外观:

我们围绕这一概念的第一个实现可在上获得

要在本地开发图像,我们使用一个自定义开发框,该开发框将Dockito Vault作为服务运行

唯一的缺点是需要运行HTTP服务器,因此不需要构建Docker hub


将加密密钥装入容器,然后通过管道传递密码。难点在于
分离
模式,该模式在读取容器中的管道时将挂起。下面是一个解决方法:

cid=$(docker run-d-i-sh-c'reada;echo“[$A]”“exec some server')

docker exec-i$cid sh-c'cat>/proc/1/fd/0'这已经在envvars中讨论过了,可能已经足够好了:指向docker的秘密管理功能的更新可能重复了Upvote。
RUN ONVAULT npm install --unsafe-perm