FastMCP SSE会话端口控制及Docker跨主机连接问题咨询
FastMCP Docker部署SSE跨容器连接问题解决方案
问题梳理
使用FastMCP 2.2.7 + MCP Python SDK 1.7.1时,不同部署场景下的SSE连接表现:
- 主机内运行服务+主机客户端:正常,SSE会话基于初始8000端口建立,随机端口为客户端本地端口
- Docker内服务+Docker内客户端:正常
- Docker内服务+主机客户端:失败,核心原因并非随机端口无法映射,而是服务端回连地址错误
核心问题解答
1. 是否存在SSE会话端口控制配置?
不存在sse_port这类配置项。你看到的随机端口是客户端发起请求的本地端口,而非服务端监听端口。FastMCP的SSE交互完全基于你指定的port(如8000/8010)的HTTP长连接完成,服务端仅监听该端口,无需额外映射随机端口。
2. 服务端回连127.0.0.1导致的连接失败解决办法
判断准确——服务端从请求中获取的客户端地址是Docker内部的127.0.0.1,无法回连到主机客户端,解决步骤:
- 客户端修改连接地址:
不要用localhost,改用主机局域网IP(如192.168.1.100)或Docker主机专属地址(host.docker.internal,仅Docker Desktop支持):async with sse_client('http://192.168.1.100:8010/sse') as (read, write): async with ClientSession(read, write, read_timeout_seconds=timedelta(seconds=5)) as session: await session.initialize() - 服务端绑定外部可访问地址:
启动服务时绑定0.0.0.0,允许接收任意来源的请求:mcp_server: FastMCP = FastMCP("mycorp", host="0.0.0.0", port=8010) - Docker端口映射正确配置:
运行容器时映射服务端端口到主机:docker run -p 8010:8010 your-fastmcp-image
3. FastMCP是否支持跨机器/容器部署?
完全支持。只要满足:
- 服务端绑定
0.0.0.0,开放对应端口 - 客户端能通过网络访问到服务端的IP和端口
- 网络环境允许HTTP长连接(无防火墙/安全组拦截)
日志补充说明
日志中的NameResolutionError是服务端尝试访问ci-backend服务时的DNS解析失败,与SSE连接问题无关,需单独排查该服务的网络可达性或DNS配置。
内容的提问来源于stack exchange,提问作者Giorgi Sh.
相关产品推荐
相关产品推荐

