python - 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 可以解决此问题。
解决方案
推荐阅读
- git - Visual Studio Team Explorer GitHub - 当你有两个遥控器时,你如何指定一个用于传出提交?
- junit - 如何在不创建新测试的情况下导入 Jira X-Ray 数据
- r - 如何在 R 的 for 循环中保存更改名称的数据帧?
- django - Django H14 Heroku 错误,我该如何解决?
- javascript - 如何最好地在烧瓶应用程序中动态填充下拉列表?
- json - 修改 json 对象数组
- powershell - 使用employeeid更新员工经理
- python - 在烧瓶中创建可下载文件的问题
- swiftui - 防止 SwiftUI App 进入睡眠操作 WatchOS
- javascript - 谷歌注册不适用于第一次点击元素,但之后工作正常。为什么?