Docker撰写无法正确设置容器链接

时间:2016-05-12 12:40:11

标签: docker docker-compose

我最近开始使用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 未在我的主机上运行。

有什么想法吗?

我的设置:

  • Docker版本1.11.1
  • Docker Compose版本1.7.1
  • 操作系统:Win7上的Oracle VirtualBox上的Ubuntu 16.04

1 个答案:

答案 0 :(得分:1)

我正在使用:

$ docker --version
Docker version 1.11.1, build 5604cbe

如果我逐字地使用您的docker-compose.yml文件,并使用以下Dockerfiledocker-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查找处理名称解析。