docker桥networking,容器之间的HTTP调用非常慢(docker升级后)

服务器规格:

os: Ubuntu 14.04 docker: 1.10.2 docker-compose: 1.6.0 

刚刚从1.9升级到1.10,并添加docker撰写(但不使用撰写)。 缓慢问题在升级之前不会发生。

此外,Dockerconfiguration了我的DNS IP和代理,如'/ etc / default / docker'

 DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --dns 138.XX.XX.X" export http_proxy="http://proxy.myproxy.com:8888/" 

我的IP完全拼出来,只是使用X的问题

我有两个运行HTTP服务器(Node.js)的容器(container_a,container_b),两个容器都在桥接networking(–net = mynetwork)上运行,

 docker network create mynetwork 

两个容器使用container_name作为HTTP调用的“主机”来相互进行HTTP调用,如下所示:

 container_b:3000/someurl 

通过docker桥networking在两个集装箱之间进行的这些呼叫需要很长时间才能完成(约5秒钟)。 这些调用通常在100ms以下运行。

当我改变networking从–net = mynetwork这些容器,而是运行它们都作为 – networking=主机,同时还修改我的http调用使用“localhost”作为主机,而不是容器名称和暴露他们的端口通过一个-p标志…这些调用在<100ms的预期时间内运行。

看起来,docker桥networking导致我在集装箱之间的通话需要很长时间。

任何想法,我可以看看诊断/纠正这个问题?

这个问题是由于Docker 1.10发布的内部DNS发生了变化的结果。

更多信息可以在这里find: https : //github.com/docker/docker/issues/20661

我在守护进程上启用了debugging模式,并在发出请求时查看了日志。 我可以先看看它在8.8.4.4之前先试试“8.8.8.8”,然后再join我为主机添加的DNS IP并parsing。 我的猜测是我的公司代理正在导致前两个请求(8.8 ..)挂起并最终超时,导致缓慢解决在列表中的第三个正确的IP。

我的解决scheme是改变我的/ etc / default / docker文件中的DNS顺序,让我的内部IP第一。

 DOCKER_OPTS="--dns 138.XX.XX.X --dns 8.8.8.8 --dns 8.8.4.4 " 

这似乎解决了我们的问题,因为它首先解决了容器之间的基于容器名的HTTP请求到主机的DNS IP。