我有两个容器webinterface
和db
,而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
这将使用主机定义的环境变量,该变量在此处不起作用。 有办法解决这个问题吗?
答案 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有效地为您提供服务发现,而无需修改您的应用程序。