使用Docker环境variables作为凭据
最近我们正试图find一种通过环境variables向我们在容器中运行的基于Spring的应用程序注入凭证的正确方法。
确切的过程包括
- 一个引导shell脚本,docker CMD作为入口点运行
- 在脚本中输出一串凭据
- 在脚本文件的末尾运行应用程序
通过这种方式,没有一个docker inspect
, docker exec [container_id] env
或bashdocker容器和运行env
将看到这些环境variables,即。 我们用bootstrap脚本注入的是不透明的。
所以问题是:还有什么我们应该考虑这个解决scheme? 任何明显的毛刺?
我们对于docker工程师来说是相当新颖的,所以这个关于通过shell脚本注入环境variables的行为是不可见的,因为之后有没有解释为什么的文档? 我们还没有find一个好的文档,但只是发现它是这样工作的
PS。 docker工将来会改变这种行为吗?
提前致谢!
这看起来总体上是一个非常好的方法。
但是,我不认为你可以完全隐藏有权检查进程环境的人的环境variables。 在我看来,如果你发现应用程序进程的id(在容器内或从主机),你应该能够在/proc
find它的环境。 不会显示为docker env
,但它仍然在某处。 此外,无论如何,任何这样的人都可能直接连接到您的保险柜。
这意味着,这不会使容器环境中出现subprocess的环境,但它并不能真正将其隐藏起来(已经可以访问主机和控制docker的人)。
不过,恭喜这个设置。 比图像中内置证书好得多。
有趣的发现。 我认为这是因为环境variables对于运行应用程序的shell会话是本地的。 请参阅https://help.ubuntu.com/community/EnvironmentVariables
过程局部性
环境variables的值是本地的,这意味着它们是特定于正在运行的进程或为其设置的。 这意味着,如果我们打开两个terminal窗口(这意味着我们有两个独立的bash进程正在运行),并且在其中一个窗口中更改了一个环境variables的值,那么这个更改将不会被其他窗口中的shell看到其他程序目前在桌面上。
关于风险,这里有一个很好的讨论https://github.com/docker/docker/pull/9176#issuecomment-99542089 。 例如,您可能在同一个会话中打印出或logging环境的debugging应用程序,任何subprocess也会看到环境variables。