177

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

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

当我检查容器中的主机名时,它不会拾取affy.

4

6 回答 6

78

docker-compose 3.0 及更高版本开始,您可以只使用hostname密钥:

version: "3.0"
services:
  dns:
    hostname: your-name
于 2020-08-06T20:25:11.157 回答
73

我发现使用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使定义的别名可用。

于 2017-11-13T12:10:45.773 回答
61

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
于 2015-04-28T17:48:50.223 回答
46

基于 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作为主机名。

于 2016-11-01T23:39:06.993 回答
12

我发现的最简单的方法是在docker-compose.ymlSee container_name文档中设置容器名称。适用于 docker-compose v1+。它适用于容器到容器,而不是从主机到容器。

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

现在您应该能够affy使用容器名称从其他容器访问。我必须为开发环境中的多个 redis 服务器执行此操作。

注意只要您不需要扩展,该解决方案就可以工作。例如一致的个人开发环境。

于 2019-05-25T06:24:23.107 回答
4

我需要旋转freeipa 容器才能拥有一个工作的 kdc,并且必须给它一个主机名,否则它不会运行。最终对我有用的是HOSTNAME在 compose 中设置 env 变量:

version: 2
services:
  freeipa:
    environment:
      - HOSTNAME=ipa.example.test

现在它的工作:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
于 2018-03-08T07:42:50.340 回答