如何在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出来。