能否从容器中确定 Docker 主机的主机名?
Can one determine the hostname of the Docker host from a Container?
这是 的重复问题。但具有讽刺意味的是,尽管该问题的标题是,所有答案都说:使用 ENV 变量。
我的用例:我不知道 docker 是 运行ning 通过 docker-compose 还是 swarm。但是,不会是docker运行!我正在尝试启动驻留在主机上的升级脚本。因此,在容器中我需要 docker 主机名。有没有任何编程方式可以在没有环境变量的情况下获得它?
没有。 docker 的目标是尽可能隔离宿主环境。获取主机名的唯一方法是将其作为变量传递到容器中(或绑定挂载包含主机名的文件等)。
I don't know if docker is running via docker-compose or swarm. However, it will not be docker run! I am trying to kick off an upgrade script that resides on the host.
你为什么关心容器是如何启动的?您打算如何 运行 主机上的脚本?这些问题的答案可能有助于我们更好地回答您的原始问题。
这是已在 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}}'
如果您使用 Docker 作为 Mac,您可以使用以下主机名:
docker.for.mac.localhost
这是
我的用例:我不知道 docker 是 运行ning 通过 docker-compose 还是 swarm。但是,不会是docker运行!我正在尝试启动驻留在主机上的升级脚本。因此,在容器中我需要 docker 主机名。有没有任何编程方式可以在没有环境变量的情况下获得它?
没有。 docker 的目标是尽可能隔离宿主环境。获取主机名的唯一方法是将其作为变量传递到容器中(或绑定挂载包含主机名的文件等)。
I don't know if docker is running via docker-compose or swarm. However, it will not be docker run! I am trying to kick off an upgrade script that resides on the host.
你为什么关心容器是如何启动的?您打算如何 运行 主机上的脚本?这些问题的答案可能有助于我们更好地回答您的原始问题。
这是已在 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}}'
如果您使用 Docker 作为 Mac,您可以使用以下主机名:
docker.for.mac.localhost