如何在没有环境变量的情况下从该主机上的 docker 容器中获取 docker 主机的主机名

新手上路,请多包涵

除了使用环境变量之外,还有哪些方法可以从在该主机上运行的容器中获取 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, 我可以从中获取主机名。但我只是好奇我在没有 Helios 的情况下使用 docker。

原文由 David Xia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 816
2 个回答

您可以将主机名作为环境变量传入。你也可以挂载/etc,这样你就可以cat /etc/hostname。但我同意 Vitaly 的观点,这不是容器 IMO 的预期用例。

原文由 seanmcl 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以轻松地将其作为环境变量传递

docker run .. -e HOST_HOSTNAME=`hostname` ..

使用

-e HOST_HOSTNAME=`hostname`

将调用主机名并将其返回用作名为 HOST_HOSTNAME 的环境变量,当然您可以根据需要自定义密钥。

请注意,这适用于 bash shell,如果您使用不同的 shell,您可能需要查看“反引号”的替代方案,例如 fish shell 替代方案是

docker run .. -e HOST_HOSTNAME=(hostname) ..

原文由 Mohammad AbuShady 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进