You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Docker部署FastAPI后请求出现WinError10049连接错误求助

问题与解决方案

问题背景

我开发了一个FastAPI应用,之前在Colab通过ngrok暴露外部端口,现在改为Docker部署。Dockerfile、依赖配置、启动命令均正常执行,但在Windows系统的IDLE中发送请求时出现WinError 10049连接错误。

配置文件与操作步骤

Dockerfile

FROM python:3.10-slim

RUN apt-get update && apt-get install -y ffmpeg

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

# Make port 8000 available to the world outside this container
EXPOSE 8000

# Define environment variable
ENV NAME FastAPIApp

# Run app.py when the container launches
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

requirements.txt

fastapi
uvicorn
python-multipart
pydub
nest-asyncio
audonnx 
audinterface

构建与启动命令

docker build -t my-fastapi-app .
docker run -p 8000:8000 my-fastapi-app

客户端请求代码

import requests

url = 'http://0.0.0.0:8000'
files = {'file': open('C:\\Users\\Z\\Desktop\\v\\f.m4a', 'rb')}

response = requests.post(url, files=files)

print(response.status_code)
print(response.text)

报错信息

Traceback (most recent call last):
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 203, in _new_conn
    sock = connection.create_connection(
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
    raise err
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\connection.py", line 73, in create_connection
    sock.connect(sa)
OSError: [WinError 10049] The requested address is not valid in its context

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 791, in urlopen
    response = self._make_request(
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 497, in _make_request
    conn.request(
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 395, in request
    self.endheaders()
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1281, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1041, in _send_output
    self.send(msg)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 979, in send
    self.connect()
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 243, in connect
    self.sock = self._new_conn()
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 218, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x000002C8B47DE610>: Failed to establish a new connection: [WinError 10049] The requested address is not valid in its context

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 486, in send
    resp = conn.urlopen(
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 845, in urlopen
    retries = retries.increment(
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\retry.py", line 515, in increment
    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='0.0.0.0', port=8000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002C8B47DE610>: Failed to establish a new connection: [WinError 10049] The requested address is not valid in its context'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\requestapi.py", line 6, in <module>
    response = requests.post(url, files=files)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\Z\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 519, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=8000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002C8B47DE610>: Failed to establish a new connection: [WinError 10049] The requested address is not valid in its context')

解决方案

核心修复:修改请求地址

Windows系统中,0.0.0.0仅表示服务监听所有网卡,不能作为客户端请求的目标地址。将请求代码中的url改为以下任一地址即可:

# 方案1:使用localhost
url = 'http://localhost:8000'
# 方案2:使用本地回环IP
url = 'http://127.0.0.1:8000'

额外排查项

  1. 确认容器状态:执行docker ps查看容器是否处于Up状态,端口映射是否为0.0.0.0:8000->8000/tcp或:::8000->8000/tcp
  2. 防火墙检查:确保Windows防火墙未阻止本地8000端口的入站/出站请求
  3. Docker Desktop配置:如果使用WSL2后端,确认Docker Desktop已启用WSL集成,也可尝试使用WSL分配的IP(通过wsl hostname -I获取)作为请求地址

内容的提问来源于stack exchange,提问作者Beryl Amend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:04:55