首页 > 解决方案 > docker-compose 和 uWSGI 的随机“对等连接重置”错误

问题描述

我正在尝试使用 docker-compose 运行我的应用程序的测试,但是当一个容器尝试对同一网络中的另一个容器进行 HTTP 调用时,我收到随机的“对等连接重置”错误。

我在容器 A 中有以下代码:

session = requests.session()
while True:
    session.get("http://container-b:3171/health/")

这会调用容器 B 上的一个虚拟端点,它只返回一个 HTTP 200。容器 B 是一个由 uWSGI 提供服务的 Python 应用程序。

该循环运行了大约 1000 次,然后失败并出现以下错误:

requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

到目前为止我发现了什么:

这个问题似乎与 docker-compose 如何设置网络有关。如果我将容器 B 绑定到本地端口并将我的代码更改为调用localhost而不是container-b问题消失:

session = requests.session()
while True:
    # use "localhost" instead of the "container-b" docker-compose alias
    session.get("http://localhost:3171/health/")

我还注意到,如果我不使用 requestsSession对象,问题就不会发生:

def test_bli():
    while True:
        requests.get("http://stub-server:3171/health/")

会话保持连接打开,所以我猜连接在一段时间后被关闭(while循环只运行了几秒钟)

是什么导致连接断开?

更新

将容器 B 从 uWSGI 更改为 gunicorn 可以解决此问题。

标签: pythondockerdocker-composepython-requestsuwsgi

解决方案


推荐阅读