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

dns: image: phensley/docker-dns hostname: affy domainname: affy.com volumes: - /var/run/docker.sock:/docker.sock 

When I check the hostname in the container it does not pick up affy.

3

6 Answers

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

version: "3.0" services: dns: hostname: your-name 
2

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.

3

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 
5

Based on docker documentation:

I simply put hostname: <string> in my docker-compose file.

E.g.:

[...] lb01: hostname: at-lb01 image: at-client-base:v1 [...] 

and container lb01 picks up at-lb01 as hostname.

3

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.

4

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 
3

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy