主机解析与docker和docker-compose

时间:2017-08-28 12:21:48

标签: docker ubuntu-14.04 docker-compose

我想知道为什么,使用docker-compose,容器在使用docker时无法解析主机名?主机位于不同的物理计算机上,但位于同一网络上。

我的Dockerfile

FROM openjdk:8-jre-alpine
CMD ping -c 2 myhost

我的docker-compose.yml

version: '3.3'
services:
    net:
        build: .
        image: test/myimage:1.0
        container_name: mycontainer

我尝试docker-compose build之后

docker run -it test/myimage:1.0
PING myhost (10.20.78.13): 56 data bytes
64 bytes from 10.20.78.13: seq=0 ttl=250 time=0.720 ms
64 bytes from 10.20.78.13: seq=1 ttl=250 time=0.515 ms

docker-compose up
Recreating mycontainer ...
Recreating mycontainer ... done
Attaching to mycontainer
mycontainer | ping: bad address 'myhost'
mycontainer exited with code 1

我能做些什么才能让它发挥作用?

EDIT1

使用cat /etc/resolv.conf代替ping -c 2 myhost

docker-compose up
Recreating mycontainer ...
Recreating mycontainer ... done
Attaching to mycontainer
mycontainer | search myorg.intra
mycontainer | nameserver 127.0.0.11
mycontainer | options ndots:0
mycontainer exited with code 0

docker run -it test/myimage:1.0
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.19.128.55
nameserver 10.19.142.23
nameserver 10.19.128.56
search myorg.intra

2 个答案:

答案 0 :(得分:1)

您还需要在撰写中使用dns条目

version: '3.3'
services:
    net:
        build: .
        image: test/myimage:1.0
        container_name: mycontainer
        dns:
          - 10.19.128.55
          - 10.19.142.23
          - 10.19.128.56
        dns_search: myorg.intra

如果您不想为每个容器指定它们,那么您甚至可以直接在守护程序级别设置它们。

在JSON文件中创建或编辑/etc/docker/daemon.json及以下条目

{
    "dns": ["10.19.128.55", "10.19.142.23", "10.19.128.56"],
    "dns-search": ["myorg.intra"],
}

使用service docker restart重新启动docker服务。那么你不应该需要docker-compose中的条目。您的原始docker-compose应该有效

答案 1 :(得分:0)

直接运行docker命令与执行某些docker-compose运行时,网络设置存在细微差别。使用docker-compose,容器将附加到某个用户定义的网络,该网络为bridged network,但与default bridged network的配置不同。后者执行一些特殊配置,以向后兼容这些网络功能不像今天这样的版本。

我假设从compose运行时,您缺少主机上可用的某些dns设置,因此您无法解析网络上的其他主机。请查看差异herehere。对于第一次检查,您可以在运行cat /etc/resolv.conf而不是ping命令时比较两种方式的输出,并查看需要添加的内容以使其在compose中起作用。