2015-09-09 67 views
1

是否有可能让Docker在运行时共享与--volumes-from链接的容器的环境变量,与使用--link链接的容器的方式相同?Docker - 共享具有引用卷容器的环境变量

我在我的应用程序使用的数据,仅容器持久性数据,我想在一个数据容器是否在运行时所引用我的应用程序容器的入口点脚本来检查和取消的话是没有的。
我的想法是检查是否设置了数据容器的环境变量(包含暴露的卷的路径),我还计划在脚本的某些点使用它的值(例如,设置我的数据目录应用程序在其配置文件中)。

有没有什么办法可以达到这个目的?如果不是,那么下一个最好的方法是做什么?


我发现docker inspect回报HostConfig.VolumesFrom下的所有volumes-from容器。这并不能完全解决共享问题,因为我想检查一个固定值(环境变量的名称)而不是容器名称,并且也需要变量的值,但这是一个开始。

+0

您可以将点文件保存在图像中。 – Kosch

+0

@Kosch你的意思是什么点文件? – RikuXan

+0

像.bashrc,.bash_profile等地方设置变量和其他有趣的东西。下面的答案非常好,可以说与组织配置相关的问题分离。基本上你需要一种方法让你在机器上进行配置。所以这只是在正确的时间将正确的文件送到正确的地方。 – Kosch

回答

1

有没有什么办法可以做到这一点,如果不是什么会是下一个 做我描述的事情的最佳方式?

您不能使用--volumes-from将环境变量从一个容器暴露给另一个容器。

您的应用程序不一定关心数据容器是否在运行时被引用。您应该在Dockerfile中声明VOLUME,以便(a)应用程序将使用VOLUME指令产生的匿名卷初始化新的数据存储,或者(b)使用使用凋落--volumes-from或使用-vdocker run命令行上。

当您启动应用程序容器(-e DATA_PATH=/path/to/my/data)时,您可以简单地提供数据卷的位置作为环境变量。

如果您关心数据卷是否以某种方式“初始化”,您可以检查DATA_PATH位置以查找某种特定标志文件(if ! [ -f "$DATA_PATH/flagfile" ]; then ...)。

+0

我实际上希望数据容器是强制性的,以鼓励分离应用程序和数据,原因类似于http://stackoverflow.com/questions/18496940/how-to-deal-with-persistent-storage-eg-databases在码头和参考文章。 使用运行时环境变量是一个好主意,但是我觉得他们没有真正实施数据容器,因为它们也可以用于运行时卷。 – RikuXan