【发布时间】:2015-04-22 21:10:46
【问题描述】:
除了使用环境变量之外,还有哪些方法可以从运行在该主机上的容器中获取 docker 主机的主机名? 我知道我可以在创建容器时将主机名作为环境变量传递给容器。我想知道如何在运行时查找它。
foo.example.com (docker host)
bar (docker container)
有没有办法让容器 bar 在 docker 主机 foo.example.com 中运行以获取“foo.example.com”?
编辑以添加用例:
容器会为表单的服务发现创建一个 SRV 记录
_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com.
其中 20003 是 docker 主机上动态分配的端口,用于侦听 bar 中某个固定端口的服务(docker 处理从主机端口到容器端口的映射)。
我的容器将运行健康检查以确保它已成功创建该 SRV 记录,因为在其他 docker 主机上将有许多其他 bar 容器也创建自己的 SRV 记录。
_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com. <--
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo2.example.com.
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo3.example.com.
运行状况检查将遍历 SRV 记录以查找上面的第一个记录,因此需要知道其主机名。
一边
我正在使用Helios,只是发现它添加了一个env var for me,我可以从中获取主机名。但我只是好奇我在没有 Helios 的情况下使用 docker。
【问题讨论】:
-
能否请您澄清一下,为什么需要此功能?
-
如果你能解释你的用例,也许有更好的方法来解决你的问题?
-
@VitalyIsaev 添加了用例
-
另一个出现这种情况的用例:如果您想使用 Docker 将 Erlang 部署容器化,但让 docker 容器内部的行为像主机一样对外部世界起作用。在这种情况下,您希望 erlang 节点具有与主机匹配的节点名。
-
不幸的是 best answer 被删除了...只需使用
host.docker.internal。
标签: docker