能从容器中确定Docker主机的主机名吗?

问题描述:

这是this one.的一个重复问题。但具有讽刺意味的是,尽管这个问题的标题,所有答案都说:使用ENV变量。能从容器中确定Docker主机的主机名吗?

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

否。码头工人的目标是尽可能隔离主机环境。获取主机名的唯一方法是将它作为变量传递给容器(或者绑定包含主机名的文件等)。

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

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

+0

工作,通过“我不'不知道码头是否正在运行...或群集“,我的意思是我不在意”如何“启动容器。如果您知道运行远程脚本的最佳方式,请告诉我;然而,用任何这样的机制,我知道我需要该主机的名称/ IP地址,因此我的问题 – JoeG

下面是已在17.10https://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}}'