我怎样才能将秘密数据传递给一个容器?

我的Tomcat容器需要必须受到良好保护的数据,即数据库访问密码证书以及单点login到其他系统的密钥

我已经看到了一些build议使用-e-env-file来传递秘密数据到一个容器,但这可以发现与docker检查( -env-file也显示在docker检查文件的所有属性)。

另一种方法是将数据容器与服务容器的秘密链接起来 ,但我不喜欢在我的registry中使用这个数据容器的概念(可供更广泛的人使用)。 我知道我可以build立一个私人的registry,但是我需要不同的registry来进行testing和生产,而且每个有权访问生产registry的人都可以访问这个秘密数据。

我正在考虑用一个包含秘密数据的目录来设置我的服务器,并将秘密数据安装到我的容器中 。 这将与具有不同秘密的testing和生产服务器很好地协同工作。 但它创build了容器对我的特定服务器的依赖关系。

所以我的问题是:你如何处理秘密数据,这个问题最好的解决方法是什么?

2017年1月更新

Docker 1.13现在有docker群的命令docker secret
另请参阅“ 为什么不推荐使用DOCKERFILE ARG来传递秘密? ”。


原始答案(2015年9月)

docker vault的概念,在阿德里安·穆亚 先生的回答中提到,在第1030号问题上进行了积极的讨论(关于第13490 号问题的讨论仍在继续)。

现在被驳回的是因为超出了docker的范围,但也包括:

我们已经提出了一个简单的解决scheme: 一个bash脚本,一旦通过一个单一的RUN命令执行,从本地HTTP服务器下载私钥,执行给定的命令,然后删除键

由于我们在单个RUN执行所有这些操作,所以图像中没有任何内容被caching。 以下是它在Dockerfile中的外观:

 RUN ONVAULT npm install --unsafe-perm 

dockito/vault提供了围绕这个概念的第一个实现。

为了在本地开发图像,我们使用运行Dockito Vault作为服务的自定义开发框。

唯一的缺点是需要运行HTTP服务器,所以没有Docker中心构build。