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

问题描述 投票:68回答:4

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

dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock
docker docker-compose
4个回答
21
投票

我发现使用docker run时其他容器看不到主机名。事实证明这是一个known issue(可能更多的已知功能),部分讨论是:

我们应该向使用主机名的文档添加警告。我认为它很少有用。

分配主机名的正确方法 - 就容器网络而言 - 是这样的define an alias

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

不幸的是,这仍然不适用于docker run。解决方法是为容器分配一个名称:

docker-compose run --name alias1 some-service

然后可以从其他容器中取出alias1


38
投票

这似乎工作正常。如果我将您的配置放入文件中:

$ 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

24
投票

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

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

Ef。:

[...]

lb01:
  hostname: at-lb01
  image: at-client-base:v1

[...]

和容器lb01选择at-lb01作为主机名。


2
投票

我需要旋转freeipa container以获得一个工作的kdc并且必须给它一个主机名,否则它将无法运行。最终对我有用的是在compose中设置HOSTNAME env变量:

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

现在它的工作:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.