【发布时间】:2017-11-13 17:48:57
【问题描述】:
我使用 docker swarm 模式运行 docker swarm。假设我有 4 个节点,1 个经理,3 个工人。主机名是:
- manager0
- worker0
- 工人1
- 工人2
我以global模式启动服务,所以每个节点都运行一次服务。
假设命令如下所示:
docker service create --name myservice --mode global --network mynetwork ubuntu wait 3600
mynetwork 是一个覆盖网络。
现在我正在尝试访问容器中 docker 主机的主机名,因此我可以将主机名传递给容器中的应用程序。
我尝试使用环境变量(--env hostname=$(hostname))传递主机名,但实际上${hostname} 仅在管理器上执行,并且所有节点的主机名都设置为manager0。
有没有办法访问主机名或将主机名传递给容器?
【问题讨论】:
-
每个已启动容器的主机名在启动时由一个随机字符串定义,因此我认为我们不能在启动时将其作为选项传递。您是否可以运行 4 个独立的服务,以便为每个服务定义不同的名称?
-
这不会很好地扩展。 4 个节点是我的基本设置,但将来会添加更多节点。我无法为每个节点启动服务。也许我应该查看键值存储来保存主机名,或者从我的 DNS 服务器获取主机名。
-
--hostname="{{.Node.Hostname}}" 试试这个。它对我有用
标签: docker docker-swarm