我的Tomcat容器需要受到良好保护的数据,即密码用于数据库访问,证书和密钥用于单点登录到其他系统。
我已经看到了一些使用-e
或-env-file
将秘密数据传递到容器的建议,但这可以通过docker inspect来发现(-env-file
也显示了所有的属性文件在docker inspect)。
另一种方法是将数据容器与秘密链接到服务容器,但我不喜欢在我的注册表中拥有此数据容器的概念(可供更多人使用) 。我知道我可以建立一个私人注册表,但是我需要不同的注册表来进行测试和生产,但仍然可以访问生产注册表的每个人都可以访问秘密数据。
我正在考虑使用包含机密数据的目录设置我的服务器,并将机密数据安装到我的容器中。这对于具有不同秘密的测试和生产服务器非常有效。但它会创建容器与我的特定服务器的依赖关系。
所以我的问题是:你如何处理秘密数据,这个问题的最佳解决方案是什么?
答案 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 Mouat中his 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中心构建。