能从容器中确定Docker主机的主机名吗?
问题描述:
这是this one.的一个重复问题。但具有讽刺意味的是,尽管这个问题的标题,所有答案都说:使用ENV变量。能从容器中确定Docker主机的主机名吗?
我的用例:我不知道docker是通过docker-compose还是swarm运行。但是,它不会是码头运行!我试图启动驻留在主机上的升级脚本。因此,从容器内我需要码头主机名。有没有任何编程方式来获得这个没有环境变量?
答
否。码头工人的目标是尽可能隔离主机环境。获取主机名的唯一方法是将它作为变量传递给容器(或者绑定包含主机名的文件等)。
我不知道码头是通过docker-compose还是swarm运行。但是,它不会是码头运行!我试图启动驻留在主机上的升级脚本。
你为什么在意如何启动容器?你如何计划在主机上运行脚本?这些问题的答案可能有助于我们为您的原始问题提供更好的答案。
答
下面是已在17.10
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}}'
工作,通过“我不'不知道码头是否正在运行...或群集“,我的意思是我不在意”如何“启动容器。如果您知道运行远程脚本的最佳方式,请告诉我;然而,用任何这样的机制,我知道我需要该主机的名称/ IP地址,因此我的问题 – JoeG