【问题标题】:Docker bridge network, HTTP calls between containers VERY slow (after docker upgrade)Docker 桥接网络,容器之间的 HTTP 调用非常慢(在 docker 升级之后)
【发布时间】:2016-02-25 23:59:37
【问题描述】:

服务器规格:

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 标志...调用在

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

我可以在哪里诊断/纠正这个问题?

【问题讨论】:

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


    【解决方案1】:

    此问题是由于对作为 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。

    【讨论】:

    • 你在容器中找到那个文件了吗?
    • @Notflip /etc/default/docker 是 docker 守护进程的配置文件。它存在于主机上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多