Docker桥接网络,容器之间的HTTP调用非常慢(在docker upgrade之后)

时间:2016-02-24 16:50:16

标签: networking docker containers ubuntu-14.04 docker-networking

服务器规格:

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

刚刚从1.9升级到1.10并添加了docker-compose(但未使用compose)。在升级之前没有发生缓慢问题。

Docker配置了我的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来提问

我有两个容器(container_a,container_b)都运行HTTP服务器(Node.js),两个容器都在桥接网络上运行(--net = mynetwork)我通过以下方式创建:

docker network create mynetwork

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

container_b:3000/someurl

通过docker bridge网络在两个容器之间进行的这些调用需要很长时间才能完成(约5秒)。这些调用通常在100毫秒以下运行。

当我在这些容器上从--net = mynetwork更改网络时,而是将它们作为--net = host运行,同时还修改我的http调用以使用“localhost”作为主机而不是容器名称并暴露他们的端口通过-p标志...调用在预期的时间内运行< 100毫秒。

看起来docker bridge网络导致我在容器之间的调用需要很长时间。

我可以在哪里找出诊断/纠正此问题的想法?

1 个答案:

答案 0 :(得分:4)

此问题是作为docker 1.10的一部分发布的内部DNS更改的结果。

有关详细信息,请访问:https://github.com/docker/docker/issues/20661

我启用了守护程序的调试模式,并在我发出请求时查看了日志。我可以先看一下" 8.8.8.8"在进入" 8.8.4.4"之前然后终于来到我为主机添加并解析的DNS IP。我的猜测是我的公司代理导致前两个请求(8.8 ..)挂起并最终超时,导致在正确的IP中解析缓慢,这是列表中的第三个。

我的解决方案是更改/ 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。