How to set hostname in global service in Docker Swarm
Asked Answered
B

2

6

I have a service deployed to my Docker Swarm Cluster as global service (ELK Metricbeat).

I want to each of this service to have a hostname the same as the hostname of the running node (host)?

in another word, how I can achieve the same result in the yml file such as:

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

this is my yml file:

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

I have tried:

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

but no success.

Any solution?

Thank you in advance.

Bianka answered 6/6, 2017 at 8:45 Comment(0)
P
4

For anyone coming here :

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

No need to alter entry point ( at least on swarm on deploy )

Popgun answered 20/6, 2019 at 18:8 Comment(0)
B
2

I resolved the issue by mounting the host hostname file under /etc/nodehostname and changing the service container to use an entrypoint that read the file and replace a variable (name) in metricbeat.yml

docker-entrypoint.sh

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

envsubst '$NODE_HOSTNAME' </etc/metricbeat/metricbeat.yml.tpl > /etc/metricbeat/metricbeat.yml
Bianka answered 7/6, 2017 at 7:54 Comment(1)
When this Proposal approved, it'll fix many issues including mine: github.com/docker/swarmkit/issues/1951Bianka

© 2022 - 2024 — McMap. All rights reserved.