Dav*_*ets 88 docker docker-compose
在我的docker-compose.yml文件中,我有以下内容.但是容器不会获取主机名值.有任何想法吗?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
Run Code Online (Sandbox Code Playgroud)
imp*_*ble 50
从docker-compose 3.0 及更高版本开始,您可以只使用hostname密钥:
version: "3.0"
services:
dns:
hostname: your-name
Run Code Online (Sandbox Code Playgroud)
lar*_*sks 46
这似乎工作正常.如果我将您的配置放入文件:
$ cat > compose.yml <<EOF
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
EOF
Run Code Online (Sandbox Code Playgroud)
然后把事情搞砸:
$ 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
Run Code Online (Sandbox Code Playgroud)
然后检查容器内的主机名,一切似乎都没问题:
$ docker exec -it stack_dns_1 hostname
affy.affy.com
Run Code Online (Sandbox Code Playgroud)
foz*_*foz 33
我发现使用时其他容器看不到主机名docker run.这结果是一个已知问题(可能更多是一个已知的功能),部分讨论是:
我们应该向使用主机名的文档添加警告.我认为它很少有用.
分配主机名的正确方法 - 就容器网络而言 - 是定义一个别名,如下所示:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仍然不起作用docker run.解决方法是为容器分配一个名称:
docker-compose run --name alias1 some-service
Run Code Online (Sandbox Code Playgroud)
并且alias1然后可以从其他容器ping通.
Mar*_*ani 29
基于docker文档:https: //docs.docker.com/compose/compose-file/#/command
我只需
hostname: <string>
输入我的docker-compose文件.
例如:
[...]
lb01:
hostname: at-lb01
image: at-client-base:v1
[...]
Run Code Online (Sandbox Code Playgroud)
和容器lb01 at-lb01选为主机名.
我发现的最简单的方法是只在docker-compose.ymlSee container_name文档中设置容器名称。它适用于docker-compose v1 +。它适用于容器到容器,而不是从主机到容器。
services:
dns:
image: phensley/docker-dns
container_name: affy
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够affy使用容器名称从其他容器进行访问。我必须在开发环境中为多个Redis服务器执行此操作。
注意只要您不需要扩展,该解决方案就可以工作。例如一致的单个开发人员环境。
| 归档时间: |
|
| 查看次数: |
121071 次 |
| 最近记录: |