【问题标题】:How to set hostname in global service in Docker Swarm如何在 Docker Swarm 的全局服务中设置主机名
【发布时间】:2017-06-06 08:45:57
【问题描述】:

我有一个服务作为全局服务 (ELK Metricbeat) 部署到我的 Docker Swarm 集群。

我希望每个服务的主机名与正在运行的节点(主机)的主机名相同吗?

换句话说,我如何在 yml 文件中实现相同的结果,例如:

 docker run -h `hostname` elastic/metricbeat:5.4.1

这是我的 yml 文件:

metricbeat:
  image: elastic/metricbeat:5.4.1
  command: metricbeat -e -c /etc/metricbeat/metricbeat.yml -system.hostfs=/hostfs
  hostname: '`hostname`'
  volumes:
    - /proc:/hostfs/proc:ro
    - /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
    - /:/hostfs:ro
    - /var/run/docker.sock:/var/run/docker.sock
  networks:
    - net
  user: root
  deploy:
    mode: global

我试过了:

  hostname: '`hostname`'
  hostname: '${hostname}'

但没有成功。

有什么办法吗?

提前谢谢你。

【问题讨论】:

    标签: docker elastic-stack docker-swarm metricbeat


    【解决方案1】:

    对于任何来这里的人:

    services:
      myservice:
        hostname: "{{.Node.Hostname}}-{{.Service.Name}}"
    

    无需更改入口点(至少在 swarm on deploy 上)

    【讨论】:

      【解决方案2】:

      我通过在 /etc/nodehostname 下挂载主机主机名文件并更改服务容器以使用读取文件并替换 metricbeat.yml 中的变量(名称)的入口点解决了这个问题

      docker-entrypoint.sh

      export NODE_HOSTNAME=$(eval cat /etc/nodehostname)
      
      envsubst '$NODE_HOSTNAME' </etc/metricbeat/metricbeat.yml.tpl > /etc/metricbeat/metricbeat.yml
      

      【讨论】:

      猜你喜欢
      • 2018-03-06
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 2019-03-07
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多