如何将秘密数据传递给容器

时间:2015-09-19 05:46:45

标签: security docker docker-compose docker-registry

我的Tomcat容器需要受到良好保护的数据,即密码用于数据库访问,证书和密钥用于单点登录到其他系统。

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

另一种方法是将数据容器与秘密链接到服务容器,但我不喜欢在我的注册表中拥有此数据容器的概念(可供更多人使用) 。我知道我可以建立一个私人注册表,但是我需要不同的注册表来进行测试和生产,但仍然可以访问生产注册表的每个人都可以访问秘密数据。

我正在考虑使用包含机密数据的目录设置我的服务器,并将机密数据安装到我的容器中。这对于具有不同秘密的测试和生产服务器非常有效。但它会创建容器与我的特定服务器的依赖关系。

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

1 个答案:

答案 0 :(得分:3)

2017年1月更新

Docker 1.13现在拥有带有docker swarm的命令docker secret 另请参阅" Why is ARG in a DOCKERFILE not recommended for passing secrets?"。

原始答案(2015年9月)

Adrian Mouathis previous answer提到的docker vault概念在issue 1030中得到了积极讨论(讨论将继续issues 13490)。

现在被拒绝了,因为它超出了docker的范围,但也包括:

  

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

     

由于我们在一个RUN中执行所有操作,因此图像中不会缓存任何内容。以下是它在Dockerfile中的外观:

RUN ONVAULT npm install --unsafe-perm
  

有关此概念的第一个实现可在dockito/vault获得。

     

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

     

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