RAGflow在windows上部署,出现了Ports are not available: exposing port TCP 0.0.0.0:5455 -> 127.0.0.1:0,实际查看端口占用却又没占用。该怎么处理?一文详解

具体报错信息如下:
PS D:\Develop\Python\ragflow\docker> docker compose -f docker-compose-gpu.yml up -d
time="2025-07-28T10:27:47+08:00" level=warning msg="The \"HF_ENDPOINT\" variable is not set. Defaulting to a b
lank string."
time="2025-07-28T10:27:47+08:00" level=warning msg="The \"MACOS\" variable is not set. Defaulting to a blank s
tring."
[+] Running 5/6
 ✔ Network docker_ragflow    Created                                                                     0.1s 
 ✔ Container ragflow-redis   Started                                                                     1.3s 
 ✔ Container ragflow-minio   Started                                                                     1.4s 
 ✔ Container ragflow-es-01   Started                                                                     1.2s 
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5455 -> 127.0.0.1:0: listen tcp
 0.0.0.0:5455: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

 

问题操作
报错端口不是 3306,而是 5455 ✅ 重点排查这个端口
5455 被占用 netstat + tasklist 查占用程序
没被占用但依然报错 多半是权限问题或系统安全策略限制
快速解决方法 改成别的端口,如 6545:5455 试试看
Docker 权限不足 以管理员身份运行 Docker Desktop

 

首先我查看了这个端口是否有进程在占用:

C:\Users\47053>netstat -ano | findstr :5455
没有返回任何结果

所以标明该5455端口并没有占用。

 

接着我采用了:以管理员身份运行 Docker Desktop

结果还是报错如上。。。

 

同样,我再通过如下命令查看端口3306是否被占用

C:\Users\47053>netstat -ano | findstr :3306
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       13056
  TCP    0.0.0.0:33060          0.0.0.0:0              LISTENING       13056
  TCP    [::]:3306              [::]:0                 LISTENING       13056
  TCP    [::]:33060             [::]:0                 LISTENING       13056

说明本地MYSQL是开启在后台运行的,端口监听的是3306

然后我又通过:WIN+R, 输入 services.msc

接着禁用掉物理机的 MYSQL服务 [占用端口3306],

然后再重新执行启动命令,还是报错和之前一样。。。

 

这个时候基本可以确定:

端口 5455 没被占用,报错原因多半是 系统权限或防火墙策略阻止 Docker 绑定

 

最后,我采用了如下方案:终于成功解决了该问题:

net stop winnat
docker compose -f docker-compose-gpu.yml up -d
net start winnat

image

 

在浏览器输入:

localhost:80

返回如下结果:

image

 

 支持,RAGflow本地部署(GPU版)已经成功

 

对于最后这个命令的解释:

🔍 原因分析

这个错误:

bind: An attempt was made to access a socket in a way forbidden by its access permissions

在 Windows 下多数是 Windows NAT 驱动(WinNAT)占用端口资源或权限冲突引起的。特别是:

  • Docker 使用 Hyper-V / WSL2 网络虚拟化时

  • 系统保留了一些 NAT 转发的端口(即便没被占用,也无法绑定)


✅ 你这个命令的作用:

命令作用
net stop winnat 停止 Windows 的 NAT 服务,释放网络端口限制
docker-compose up ... 启动容器,此时端口不再被阻拦
net start winnat 重启 NAT 服务,恢复正常网络行为

💡 进阶建议(避免下次再遇到):

  1. Docker Desktop 启动时使用管理员权限

  2. 尽量避免映射到系统保留端口(如 5353、5455、5985 等)

  3. 如果频繁出现,可以执行 netcfg -d 重置网络适配器(慎用,会断网并清空虚拟网卡配置

 

 

参考资料:

https://github.com/docker/for-win/issues/9272

 

posted @ 2025-07-28 10:58  AlphaGeek  阅读(608)  评论(0)    收藏  举报