☰
【问题解决】ConnectionRefusedError: [Errno 111] Connection refused when accessing http://127.0.0.1:8000/v1
2026/10/20 15:46:05 网站建设 项目流程

文章目录

  • 【问题解决】ConnectionRefusedError: [Errno 111] Connection refused when accessing http://127.0.0.1:8000/v1/completions
    • 问题描述
    • 问题原因
    • 解决方案
      • 方案 1:检查服务器是否运行
      • 方案 2:启动服务器
        • Ollama 服务器
        • vLLM 服务器
        • FastAPI 服务器
      • 方案 3:检查服务器日志
      • 方案 4:检查 API 端点
      • 方案 5:检查防火墙设置
      • 方案 6:使用不同的端口
    • 示例代码
      • 完整的连接测试和服务器启动示例
    • 常见问题
      • Q: 为什么服务器启动后很快就崩溃了?
      • Q: 如何查看服务器的详细日志?
      • Q: 端口 8000 被占用怎么办?
      • Q: 防火墙阻止了连接怎么办?
    • 总结

【问题解决】ConnectionRefusedError: [Errno 111] Connection refused when accessing http://127.0.0.1:8000/v1/completions

问题描述

在访问本地服务器 API 时,遇到以下错误:

ConnectionRefusedError: [Errno 111] Connection refused when accessing http://127.0.0.1:8000/v1/completions

问题原因

这个错误通常由以下原因引起:

  1. 服务器未启动:本地服务器(如 Ollama、vLLM 或其他模型服务)未运行
  2. 端口错误:服务器运行在不同的端口上
  3. 网络配置问题:防火墙或网络设置阻止了连接
  4. 服务器崩溃:服务器进程已崩溃或异常退出
  5. 路径错误:API 端点路径不正确
  6. 依赖问题:服务器缺少必要的依赖项

解决方案

方案 1:检查服务器是否运行

# 检查端口 8000 是否被占用lsof-i :8000# 或使用 netstatnetstat-tuln|grep8000# 或使用 ssss -tuln|grep8000# Windows 系统使用netstat-ano|findstr :8000

方案 2:启动服务器

根据使用的服务器类型,启动相应的服务:

Ollama 服务器
# 启动 Ollama 服务ollama serve
vLLM 服务器
# 使用 vLLM 启动服务器python -m vllm.entrypoints.api_server --model mistralai/Mistral-7B-v0.1 --port8000
FastAPI 服务器
# 启动 FastAPI 服务器uvicorn app:app --host0.0.0.0 --port8000

方案 3:检查服务器日志

# 查看服务器日志(以 Ollama 为例)journalctl -u ollama# 或查看最近的日志journalctl -u ollama -n50

方案 4:检查 API 端点

确保使用正确的 API 端点:

importrequests# 测试 API 连接try:response=requests.post("http://localhost:8000/v1/completions",json={"model":"mistral","prompt":"Hello, ","max_tokens":50})print(f"Status code:{response.status_code}")print(f"Response:{response.json()}")exceptExceptionase:print(f"Error:{e}")

方案 5:检查防火墙设置

# 检查防火墙状态(Linux)sudoufw status# 允许端口 8000(Linux)sudoufw allow8000# Windows 防火墙设置# 控制面板 -> 系统和安全 -> Windows Defender 防火墙 -> 高级设置 -> 入站规则 -> 新建规则

方案 6:使用不同的端口

如果端口 8000 被占用,使用其他端口:

# 使用端口 8080 启动服务器python -m vllm.entrypoints.api_server --model mistralai/Mistral-7B-v0.1 --port8080

然后更新客户端代码:

response=requests.post("http://localhost:8080/v1/completions",# 其他参数不变)

示例代码

完整的连接测试和服务器启动示例

importrequestsimportsubprocessimporttimeimportosdefcheck_server_running(port=8000):"""检查服务器是否在指定端口运行"""try:response=requests.get(f"http://localhost:{port}/v1/models")returnresponse.status_code==200except:returnFalsedefstart_server(model="mistralai/Mistral-7B-v0.1",port=8000):"""启动 vLLM 服务器"""print(f"Starting server with model{model}on port{port}...")# 启动服务器进程process=subprocess.Popen(["python","-m","vllm.entrypoints.api_server","--model",model,"--port",str(port)],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)# 等待服务器启动time.sleep(10)# 检查服务器是否成功启动ifcheck_server_running(port):print(f"Server started successfully on port{port}")returnprocesselse:print("Failed to start server")# 打印错误信息stderr=process.stderr.read()print(f"Error:{stderr}")process.terminate()returnNonedeftest_completion(port=8000):"""测试文本生成 API"""print("Testing completion API...")try:response=requests.post(f"http://localhost:{port}/v1/completions",json={"model":"mistralai/Mistral-7B-v0.1","prompt":"Hello, how are you?","max_tokens":50,"temperature":0.7})ifresponse.status_code==200:result=response.json()print(f"Success! Generated text:{result['choices'][0]['text']}")returnTrueelse:print(f"Error:{response.status_code}-{response.text}")returnFalseexceptExceptionase:print(f"Connection error:{e}")returnFalse# 使用示例if__name__=="__main__":port=8000# 检查服务器是否已运行ifnotcheck_server_running(port):print("Server not running. Starting server...")server_process=start_server(port=port)ifnotserver_process:print("Exiting...")exit(1)# 测试 APItest_completion(port=port)# 注意:这里服务器会继续运行# 要停止服务器,使用 server_process.terminate()else:print("Server already running. Testing API...")test_completion(port=port)

常见问题

Q: 为什么服务器启动后很快就崩溃了?

A: 可能是因为内存不足、缺少依赖项或模型文件损坏。检查服务器日志获取详细错误信息。

Q: 如何查看服务器的详细日志?

A: 启动服务器时不要使用后台运行,或查看系统日志文件。对于 vLLM,可以添加--debug参数获取更详细的日志。

Q: 端口 8000 被占用怎么办?

A: 使用lsof -i :8000查看占用端口的进程,然后决定是停止该进程还是使用其他端口。

Q: 防火墙阻止了连接怎么办?

A: 在防火墙设置中允许端口 8000 的入站连接,或临时关闭防火墙进行测试。

总结

遇到ConnectionRefusedError: [Errno 111] Connection refused错误时,主要需要:

  1. 确认服务器是否正在运行
  2. 检查服务器端口是否正确
  3. 验证 API 端点路径是否正确
  4. 查看服务器日志获取详细错误信息
  5. 检查网络和防火墙设置
  6. 确保服务器有足够的资源(内存、GPU 等)

通过以上解决方案,应该能够成功连接到本地服务器 API 并进行文本生成。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询