是否可以从容器中确定Docker主机的主机名?

这是这个重复的问题。 。 但具有讽刺意味的是,尽pipe这个问题的标题,所有答案都说:使用ENVvariables。

我的用例:我不知道docker是通过docker-compose还是swarm运行的。 但是,这不会是docker运行! 我试图启动驻留在主机上的升级脚本。 因此,从容器内我需要docker主机名。 有没有任何编程的方式来获得这个没有环境variables?

没有。docker的目标是尽可能隔离主机环境。 获取主机名的唯一方法是将其作为variables传递给容器(或者绑定包含主机名的文件等)。

我不知道docker是通过docker-compose还是swarm运行的。 但是,这不会是docker运行! 我试图启动驻留在主机上的升级脚本。

你为什么关心容器是如何启动的? 你如何计划在主机上运行脚本? 这些问题的答案可能有助于我们为您的原始问题提供更好的答案。

这是在17.10实现的function请求https://github.com/moby/moby/issues/30966

这是你如何做到的:

 $ hostname testing123 $ docker service create \ --name foo \ --hostname "{{.Service.Name}}-{{.Task.Slot}}-{{.Node.Hostname}}" \ nginx:alpine $ docker inspect foo.1.k51r3eclvcelsxy6jthtavkwa --format '{{.Config.Hostname}}' foo-1-testing123 

这也应该在docker-compose

 services: nginx: image: nginx hostname: '{{.Node.Hostname}}'