Col*_*tes 6 networking containers docker ubuntu-14.04 docker-networking
服务器规格:
os: Ubuntu 14.04
docker: 1.10.2
docker-compose: 1.6.0
Run Code Online (Sandbox Code Playgroud)
刚刚从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/"
Run Code Online (Sandbox Code Playgroud)
(我的ip完全拼写出来,只是使用X的问题)
我有两个容器(container_a,container_b)都运行HTTP服务器(Node.js),两个容器都在桥接网络上运行(--net = mynetwork)我通过以下方式创建:
docker network create mynetwork
Run Code Online (Sandbox Code Playgroud)
这两个容器使用container_name作为HTTP调用的"主机",在彼此之间进行HTTP调用,如下所示:
container_b:3000/someurl
Run Code Online (Sandbox Code Playgroud)
这两个容器通过docker bridge网络进行的调用需要很长时间才能完成(约5秒).这些调用通常在100毫秒以下运行.
当我在这些容器上从--net = mynetwork更改网络时,而是将它们作为--net = host运行,同时还修改我的http调用以使用"localhost"作为主机而不是容器名称并通过它们暴露它们的端口a -p flag ...调用在预期时间<100ms内运行.
似乎docker bridge网络导致我在容器之间调用需要很长时间.
我可以在哪里找到诊断/纠正这个问题的想法?
此问题是由于 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 "
Run Code Online (Sandbox Code Playgroud)
这似乎解决了我们的问题,因为它首先将容器之间基于容器名称的 HTTP 请求解析到该主机 DNS IP。
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |