在我的docker-compose.yml
文件中,我有以下内容。但是,容器不会获取主机名值。有任何想法吗?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
当我检查容器中的主机名时,它不会拾取affy
.
在我的docker-compose.yml
文件中,我有以下内容。但是,容器不会获取主机名值。有任何想法吗?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
当我检查容器中的主机名时,它不会拾取affy
.
从docker-compose 3.0 及更高版本开始,您可以只使用hostname
密钥:
version: "3.0"
services:
dns:
hostname: your-name
我发现使用docker run
. 事实证明这是一个已知问题(也许更多是一个已知功能),部分讨论是:
我们可能应该在文档中添加关于使用主机名的警告。我认为它很少有用。
分配主机名的正确方法 - 就容器网络而言 - 是定义一个别名,如下所示:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
不幸的是,这仍然不适用于docker run
. 解决方法是为容器分配一个名称:
docker-compose run --name alias1 some-service
然后alias1
可以从其他容器 ping 通。
更新:正如@grilix 指出的那样,您应该使用docker-compose run --use-aliases
使定义的别名可用。
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
基于 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
作为主机名。
我发现的最简单的方法是在docker-compose.yml
See container_name文档中设置容器名称。适用于 docker-compose v1+。它适用于容器到容器,而不是从主机到容器。
services:
dns:
image: phensley/docker-dns
container_name: affy
现在您应该能够affy
使用容器名称从其他容器访问。我必须为开发环境中的多个 redis 服务器执行此操作。
注意只要您不需要扩展,该解决方案就可以工作。例如一致的个人开发环境。
我需要旋转freeipa 容器才能拥有一个工作的 kdc,并且必须给它一个主机名,否则它不会运行。最终对我有用的是HOSTNAME
在 compose 中设置 env 变量:
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
现在它的工作:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test