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。