可以从Container确定Docker主机的主机名吗?

时间:2017-08-03 23:51:44

标签: docker docker-swarm

this one.这是一个重复的问题。但具有讽刺意味的是,尽管存在这个问题,但所有答案都说:使用ENV变量。

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

3 个答案:

答案 0 :(得分:3)

以下是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}}'

答案 1 :(得分:1)

没有。 docker的目标是尽可能地隔离主机环境。获取主机名的唯一方法是,如果要将其作为变量传递到容器中(或者绑定安装包含主机名的文件等)。

  

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

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

答案 2 :(得分:0)

如果您使用的是Mac的Docker,则可以使用以下主机名:

docker.for.mac.localhost