主机解决与docker和docker组成

我想知道为什么,在docker-compose的情况下,容器无法在与docker协同工作时parsing主机名? 主机在不同的物理机器上,但在同一个networking上。

我的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 

你也需要在你的撰写中使用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文件中创build或编辑/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工作人员应该工作

当直接运行docker命令与执行一些docker-compose运行时,networking设置存在细微差别。 使用docker-compose时,容器会连接到某个用户定义的networking,该networking是bridged network但不具有与default bridged network相同的configuration。 后者做了一些特殊的configuration,以向后兼容这些networkingfunction不存在的版本。

我假设从compose运行时,你缺less主机上可用的一些dns设置,因此你无法parsingnetworking上的其他主机。 请看看这里和这里的区别。 对于第一次检查,您可以比较两种方法运行cat /etc/resolv.conf而不是ping命令时的输出,并查看需要添加哪些内容才能使用compose工作。