How to get the hostname of the docker host from inside a docker container on that host without env vars

后端 未结 8 1390
时光取名叫无心
时光取名叫无心 2020-12-13 12:13

What are the ways get the docker host\'s hostname from inside a container running on that host besides using environment variables? I know I can pass the hostname as

8条回答
  •  南笙
    南笙 (楼主)
    2020-12-13 13:01

    You can pass it as an environment variable like this. Generally Node is the host that it is running in. The hostname is defaulted to the host name of the node when it is created.

    docker service create -e 'FOO={{.Node.Hostname}}' nginx  
    

    Then you can do docker ps to get the process ID and look at the env

    $ docker exec -it c81640b6d1f1 env                                                                                                                                    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=c81640b6d1f1
    TERM=xterm
    FOO=docker-desktop
    NGINX_VERSION=1.17.4
    NJS_VERSION=0.3.5
    PKG_RELEASE=1~buster
    HOME=/root
    

    An example of usage would be with metricbeats so you know which node is having system issues which I put in https://github.com/trajano/elk-swarm:

      metricbeat:
        image: docker.elastic.co/beats/metricbeat:7.4.0
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
          - /proc:/hostfs/proc:ro
          - /:/hostfs:ro
        user: root
        hostname: "{{.Node.Hostname}}"
        command:
          - -E
          - |
            metricbeat.modules=[
              {
                module:docker,
                hosts:[unix:///var/run/docker.sock],
                period:10s,
                enabled:true
              }
            ] 
          - -E
          - processors={1:{add_docker_metadata:{host:unix:///var/run/docker.sock}}} 
          - -E
          - output.elasticsearch.enabled=false
          - -E
          - output.logstash.enabled=true
          - -E
          - output.logstash.hosts=["logstash:5044"]
        deploy:
          mode: global
    

提交回复
热议问题