如何dynamic设置链接容器的环境variables?

我有两个容器webinterfacedb ,而--link webinterface开始使用 – --link选项( db ),它生成的环境variables

 DB_PORT_1111_TCP=tcp://172.17.0.5:5432 DB_PORT_1111_TCP_PROTO=tcp DB_PORT_1111_TCP_PORT=1111 DB_PORT_1111_TCP_ADDR=172.17.0.5 ... 

现在我的Dockerfile webinterface容器使用一个Dockerfile来定义一些静态环境variables来定义连接:

 ENV DB_HOST localhost ENV DB_PORT 2222 

知道Dockerfile docker run也有一个-e选项,问题是我想在Dockerfile使用这些variables(在某些脚本中使用),但是用--link选项生成的值覆盖它们,例如:

 docker run -d -e DB_HOST=$DB_PORT_1111_TCP_ADDR 

这将使用主机的定义的环境variables,在这里不起作用。 有办法解决这个问题吗?

这是一个可变的扩展问题,所以要解决以下问题:

docker run -d -e DB_HOST="$DB_PORT"_1111_TCP_ADDR

对于已经运行的Unix进程,其环境variables只能从进程内部而不是从外部进行更改,所以它们本质上是非dynamic的。

如果你发现Docker链接限制,你不是唯一的人。 一个简单的解决scheme就是使用WeaveDNS 。 使用WeaveDNS,您可以简单地使用默认端口(与Weave覆盖networking一样,不需要公开/发布/重新映射任何内部端口)并通过DNSparsing每个组件(即,您的应用程序只需要查找db.weave.local ,而且不需要知道Docker链接的笨拙的环境variablesscheme)。 为了更好地了解WeaveDNS的工作原理,请查看官方入门指南之一 。 WeaveDNS有效地为您提供服务发现,而无需修改您拥有的应用程序。