如何在 docker-compose 中设置主机名?
How do I set hostname in docker-compose?
在我的 docker-compose.yml
文件中,我有以下内容。但是,容器不会获取主机名值。有什么想法吗?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
当我检查容器中的主机名时,它没有提取 affy
。
这似乎工作正常。如果我将您的配置放入文件中:
$ 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
作为主机名。
我发现使用 docker run
时主机名对其他容器不可见。结果证明这是一个 known issue(也许是一个已知的功能),部分讨论是:
We should probably add a warning to the docs about using hostname. I think it is rarely useful.
分配主机名的正确方法 - 就容器网络而言 - 是 define an alias 像这样:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
不幸的是,仍然 不适用于 docker run
。解决方法是为容器指定一个名称:
docker-compose run --name alias1 some-service
然后可以从其他容器 ping alias1
。
更新: 正如@grilix 指出的那样,您应该使用 docker-compose run --use-aliases
使定义的别名可用。
我需要旋转 freeipa container 才能有一个工作的 kdc,并且必须给它一个主机名,否则它不会 运行。
最终对我有用的是在 compose:
中设置 HOSTNAME
环境变量
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
现在开始工作了:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
我发现的最简单的方法是在 docker-compose.yml
中设置容器名称,请参阅 container_name 文档。适用于docker-compose v1+。它适用于容器到容器,而不是从主机到容器。
services:
dns:
image: phensley/docker-dns
container_name: affy
现在您应该可以使用容器名称从其他容器访问 affy
。我必须在开发环境中为多个 redis 服务器执行此操作。
注意 只要您不需要扩展,该解决方案就有效。例如一致的个人开发环境。
从 docker-compose version 3.0 and later 开始,您可以只使用 hostname
键:
version: "3.0"
services:
dns:
hostname: your-name
在我的 docker-compose.yml
文件中,我有以下内容。但是,容器不会获取主机名值。有什么想法吗?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
当我检查容器中的主机名时,它没有提取 affy
。
这似乎工作正常。如果我将您的配置放入文件中:
$ 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
作为主机名。
我发现使用 docker run
时主机名对其他容器不可见。结果证明这是一个 known issue(也许是一个已知的功能),部分讨论是:
We should probably add a warning to the docs about using hostname. I think it is rarely useful.
分配主机名的正确方法 - 就容器网络而言 - 是 define an alias 像这样:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
不幸的是,仍然 不适用于 docker run
。解决方法是为容器指定一个名称:
docker-compose run --name alias1 some-service
然后可以从其他容器 ping alias1
。
更新: 正如@grilix 指出的那样,您应该使用 docker-compose run --use-aliases
使定义的别名可用。
我需要旋转 freeipa container 才能有一个工作的 kdc,并且必须给它一个主机名,否则它不会 运行。 最终对我有用的是在 compose:
中设置HOSTNAME
环境变量
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
现在开始工作了:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
我发现的最简单的方法是在 docker-compose.yml
中设置容器名称,请参阅 container_name 文档。适用于docker-compose v1+。它适用于容器到容器,而不是从主机到容器。
services:
dns:
image: phensley/docker-dns
container_name: affy
现在您应该可以使用容器名称从其他容器访问 affy
。我必须在开发环境中为多个 redis 服务器执行此操作。
注意 只要您不需要扩展,该解决方案就有效。例如一致的个人开发环境。
从 docker-compose version 3.0 and later 开始,您可以只使用 hostname
键:
version: "3.0"
services:
dns:
hostname: your-name