this one.这是一个重复的问题。但具有讽刺意味的是,尽管存在这个问题,但所有答案都说:使用ENV变量。
我的用例:我不知道docker是通过docker-compose还是swarm运行。但是,它不会被docker运行!我正在尝试启动驻留在主机上的升级脚本。因此,从容器中我需要docker主机名。是否有任何编程方式来获取此环境变量?
答案 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