如何动态设置链接容器的环境变量?

时间:2015-04-02 07:13:59

标签: docker

我有两个容器webinterfacedb,而webinterface是使用生成环境变量的--link选项(db)启动的p>

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
...

现在我的webinterface容器使用Dockerfile,其中定义了一些静态环境变量来定义连接:

ENV DB_HOST localhost
ENV DB_PORT 2222

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

docker run -d -e DB_HOST=$DB_PORT_1111_TCP_ADDR

这将使用主机定义的环境变量,该变量在此处不起作用。 有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

这是一个可变扩展问题,因此请尝试以下方法:

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

答案 1 :(得分:0)

对于已经运行的Unix进程,其环境变量只能从进程内部而不是从外部进行更改,因此它们本质上是非动态的。

如果您发现Docker链接限制,那么您不是唯一的人。一个简单的解决方案是使用WeaveDNS。使用WeaveDNS,您可以简单地使用默认端口(与Weave覆盖网络一样,无需公开/发布/重新映射任何内部端口)并通过DNS解析每个组件(即您的应用只需要查找db.weave.local ,并且不需要知道Docker链接存在的笨重的环境变量方案。为了更好地了解WeaveDNS的工作原理,请结帐one of the official getting started guides。 WeaveDNS有效地为您提供服务发现,而无需修改您的应用程序。