【问题标题】:Set hostname of service container to host's hostname将服务容器的主机名设置为主机的主机名
【发布时间】: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


【解决方案1】:

您可以使用最新的naming templates 创建带有主机名的服务。

【讨论】:

  • BTW 命名模板不仅可以用于服务创建,还可以用于服务更新(未记录但经过测试并且确实有效,至少对于 --hostname)
【解决方案2】:

这是功能请求,已在 docker 版本17.10 中实现

https://github.com/moby/moby/issues/30966

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2014-09-04
    • 2012-09-15
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多