如何在Docker Compose中设置主机名?

在我的docker-compose.yml文件中,我有以下内容。 但是容器不会提取主机名值。 有任何想法吗?

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

这似乎工作正常。 如果我把你的configuration文件放到一个文件中:

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

然后把事情搞定:

 $ 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 

然后检查容器内的主机名,一切似乎都没有问题:

 $ docker exec -it stack_dns_1 hostname affy.affy.com 

基于docker文档: https : //docs.docker.com/compose/compose-file/#/command

我只是把hostname: <string>放在我的docker-compose文件中。

例如:

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

而容器lb01作为主机名at-lb01 -lB01处拾取。

我发现使用docker run时,主机名对其他容器是不可见的。 事实certificate,这是一个已知的问题 (也许更多的是一个已知的特征),部分讨论是:

我们应该给关于使用主机名的文档添加警告。 我认为这是很less有用的。

分配主机名的正确方法 – 就容器networking而言 – 是定义一个别名,如下所示:

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

不幸的是,这仍然不能与docker run 。 解决方法是分配容器的名称:

 docker-compose run --name alias1 some-service 

然后alias1可以从其他容器中ping出来。