[英]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.