我最近开始使用Docker Compose并遵循官方文档的介绍。我做的第一个例子(参见here)在 docker-compose.yml 中定义了两个容器,如果我理解它们,默认情况下容器是链接的。他们的.yml看起来和我一样:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
但是,使用docker exec查看正在运行的Web容器内部会发现 / etc / hosts 中没有redis的DNS条目。我也无法通过名称ping redis容器,它只适用于容器的IP地址。这是我的/ etc / hosts:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3 e886da2c2a78
我还检查了Github上的错误报告,但我发现的建议到目前为止对我没有用。我可以排除与任何防火墙问题有关的可能性,因为 firewalld 未在我的主机上运行。
有什么想法吗?
我的设置:
答案 0 :(得分:1)
我正在使用:
$ docker --version
Docker version 1.11.1, build 5604cbe
如果我逐字地使用您的docker-compose.yml
文件,并使用以下Dockerfile
将docker-compose
内容提供给build:
......
FROM alpine
RUN apk add --update darkhttpd
CMD ["darkhttpd", "/var/www/localhost/htdocs"]
然后我开始了所有事情:
$ docker-compose up -d
然后输入网络容器:
$ docker exec -it outofbounds_web_1 sh
然后ping redis
:
/ # ping -c 1 redis
PING redis (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.166 ms
--- redis ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.166/0.166/0.166 ms
一切正常。
正如评论中所提到的,/etc/hosts
没有修改,因为现在通过dns查找处理名称解析。