5

我有一个服务作为全局服务(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}'

但没有成功。

有什么解决办法吗?

先感谢您。

4

2 回答 2

4

对于任何来这里的人:

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

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

于 2019-06-20T18:08:07.637 回答
2

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

码头入口点.sh

export NODE_HOSTNAME=$(eval cat /etc/nodehostname)

envsubst '$NODE_HOSTNAME' </etc/metricbeat/metricbeat.yml.tpl > /etc/metricbeat/metricbeat.yml
于 2017-06-07T07:54:21.657 回答