繁体   English   中英

如何在Docker Swarm中的全局服务中设置主机名

[英]How to set hostname in global service in Docker Swarm

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

但没有成功。

有什么办法吗?

先感谢您。

我通过在/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

对于任何来这里的人:

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

无需更改入口点(至少在部署时是成群的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM