在我的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
。
Answers:
从docker-compose版本3开始,您可以只使用一个hostname
字段:
version: '3'
services:
dns:
hostname: 'your-name'
这似乎正常工作。如果我将您的配置放入文件中:
$ 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
hostname
和domainname
均为有效docker-compose.yml
选项。更新:经过测试,似乎仍然可以正常工作(docker-compose版本1.4.2,docker版本1.8.2)。
我发现使用时主机名对其他容器不可见docker run
。事实证明这是一个已知问题(也许是一个已知功能),其中一部分讨论是:
我们可能应该在文档中添加有关使用主机名的警告。我认为它很少有用。
就容器网络而言,分配主机名的正确方法是定义一个别名,如下所示:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
不幸的是,这仍然无法使用docker run
。解决方法是为容器分配一个名称:
docker-compose run --name alias1 some-service
并且alias1
然后可以从其他容器ping通。
--use-aliases
同docker-compose run
。这样可以避免在run
命令上对别名进行硬编码
基于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服务器执行此操作。
注意只要您不需要扩展,该解决方案就可以工作。例如一致的单个开发人员环境。
Compose 3.7
唯一的出路,我得到了数据库服务主机名从同一组的其他服务容器内看到了命名服务的主机名。使用该hostname:
属性失败。使用环境HOSTNAME =构造也失败。
aliases
描述的属性foz
。
container_name
,并hostname
以相同的值来实现我需要什么
我需要旋转freeipa容器才能使用有效的kdc,并且必须为其提供一个主机名,否则它将无法运行。最终为我工作的是HOSTNAME
在compose中设置env变量:
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
现在可以正常工作:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test