如何在Docker Swarm的全局服务中设置主机名
我在Docker Swarm集群中部署了一个服务作为全球服务(ELK Metricbeat) 我希望此服务的每个主机名都与正在运行的节点(主机)的主机名相同 换句话说,我如何在yml文件中实现相同的结果,例如:如何在Docker Swarm的全局服务中设置主机名,docker,elastic-stack,docker-swarm,metricbeat,Docker,Elastic Stack,Docker Swarm,Metricbeat,我在Docker Swarm集群中部署了一个服务作为全球服务(ELK Metricbeat) 我希望此服务的每个主机名都与正在运行的节点(主机)的主机名相同 换句话说,我如何在yml文件中实现相同的结果,例如: docker run -h `hostname` elastic/metricbeat:5.4.1 这是我的yml文件: metricbeat: image: elastic/metricbeat:5.4.1 command: metricbeat -e -c /etc/me
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
export NODE_HOSTNAME=$(eval cat/etc/nodehostname)
envsubt'$NODE_HOSTNAME'/etc/metricbeat/metricbeat.yml
对于任何来到这里的人:
services:
myservice:
hostname: "{{.Node.Hostname}}-{{.Service.Name}}"
无需更改入口点(至少在swarm on deploy上)此提案获得批准后,将解决许多问题,包括我的问题: