How do I set hostname in docker-compose?

后端 未结 8 2153
清酒与你
清酒与你 2020-11-29 18:11

In my docker-compose.yml file, I have the following. However the container does not pick up the hostname value. Any ideas?

dns:
  image: phensle         


        
相关标签:
8条回答
  • 2020-11-29 18:36

    For docker compose version: "3.4"

    It works for me:

    services:
        my-service:
            hostname: my_host_name
    

    Don't need to use dns. Just use hostname. Compose file version 3 reference

    0 讨论(0)
  • 2020-11-29 18:42

    This seems to work correctly. If I put your config into a file:

    $ cat > compose.yml <<EOF
    dns:
      image: phensley/docker-dns
      hostname: affy
      domainname: affy.com
      volumes:
        - /var/run/docker.sock:/docker.sock
    EOF
    

    And then bring things up:

    $ docker-compose -f compose.yml up
    Creating tmp_dns_1...
    Attaching to tmp_dns_1
    dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5
    

    And then check the hostname inside the container, everything seems to be fine:

    $ docker exec -it stack_dns_1 hostname
    affy.affy.com
    
    0 讨论(0)
  • 2020-11-29 18:51

    The simplest way I have found is to just set the container name in the docker-compose.yml See container_name documentation. It is applicable to docker-compose v1+. It works for container to container, not from the host machine to container.

    services:
      dns:
        image: phensley/docker-dns
        container_name: affy
    

    Now you should be able to access affy from other containers using the container name. I had to do this for multiple redis servers in a development environment.

    NOTE The solution works so long as you don't need to scale. Such as consistant individual developer environments.

    0 讨论(0)
  • 2020-11-29 18:51

    I needed to spin freeipa container to have a working kdc and had to give it a hostname otherwise it wouldn't run. What eventually did work for me is setting the HOSTNAME env variable in compose:

    version: 2
    services:
      freeipa:
        environment:
          - HOSTNAME=ipa.example.test
    

    Now its working:

    docker exec -it freeipa_freeipa_1 hostname
    ipa.example.test
    
    0 讨论(0)
  • 2020-11-29 18:52

    I found that the hostname was not visible to other containers when using docker run. This turns out to be a known issue (perhaps more a known feature), with part of the discussion being:

    We should probably add a warning to the docs about using hostname. I think it is rarely useful.

    The correct way of assigning a hostname - in terms of container networking - is to define an alias like so:

    services:
      some-service:
        networks:
          some-network:
            aliases:
              - alias1
              - alias2
    

    Unfortunately this still doesn't work with docker run. The workaround is to assign the container a name:

    docker-compose run --name alias1 some-service
    

    And alias1 can then be pinged from the other containers.

    UPDATE: As @grilix points out, you should use docker-compose run --use-aliases to make the defined aliases available.

    0 讨论(0)
  • 2020-11-29 19:00

    As of docker-compose version 3 and later, you can just use the hostname key:

    version: '3'
    services:
      dns:
        hostname: 'your-name'
    
    0 讨论(0)
提交回复
热议问题