如何dynamic设置链接容器的环境variables?
我有两个容器webinterface
和db
,而--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有效地为您提供服务发现,而无需修改您拥有的应用程序。