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.
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 2I 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.
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 5Based 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.
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.
4I 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