server error - ports are not available: exposing port TCP 0.0.0.0:11434 -> 127.0.0.1:0: listen tcp 0
winnat服务锁定了 11434 端口的绑定权限,导致 Docker 容器无法占用该端口;命令作用:重启winnat释放端口锁定,让容器能正常绑定 11434 端口;优化方案:长期建议修改容器端口映射(如 11435:11434),避免和winnat抢占端口资源。
c:/docker/data/ollama/models:/data/ollama/models -p 11434:11434 --name ollama ollama/ollama
报错
(HTTP code 500) server error - ports are not available: exposing port TCP 0.0.0.0:11434 -> 127.0.0.1:0: listen tcp 0.0.0.0:11434: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
解决办法
使用管理员运行cmd执行以下命令:
net stop winnat // 停止WinNAT服务
net start winnat // 重新启动WinNAT服务
然后再重新创建容器
一、核心原因:winnat 服务占用了 Ollama 容器需要的端口/网络资源
winnat(Windows NAT Driver)是 Windows 系统的网络地址转换驱动服务,负责管理 Windows 的 NAT 网络(比如 WSL、Docker 容器、VPN 等的网络转发)。
Ollama 容器启动失败的核心是 11434 端口/网络端口绑定被 winnat 服务占用/锁定,而执行 net stop winnat && net start winnat 本质是:
重启 Windows NAT 服务,释放被它占用的端口/网络资源,让 Docker 容器能正常绑定 11434 端口。
二、详细原理(通俗版)
1. winnat 服务的作用
winnat 是 Windows 处理“内网端口映射到公网/容器”的核心服务,会占用大量端口范围(包括 11434)用于 NAT 转发。
当你启动 Docker 容器(如 Ollama)时,容器需要将宿主机的 11434 端口映射到容器内部,但如果 winnat 已经“霸占”了这个端口的绑定权限(即使没有进程直接占用),Docker 就会报 bind: An attempt was made to access a socket in a way forbidden by its access permissions 错误。
2. 重启 winnat 的效果
- 停止服务:
net stop winnat会释放winnat占用的所有端口资源、解除端口绑定锁定; - 启动服务:
net start winnat重新初始化 NAT 服务,不会再霸占 Ollama 容器需要的 11434 端口(因为容器此时还未启动,服务重启后端口处于“未锁定”状态); - 容器启动:此时 Docker 可以正常绑定 11434 端口到容器,启动成功。
3. 典型场景(为什么会触发)
这种问题常见于:
- Windows 启用了 WSL2、Hyper-V、VPN 等依赖
winnat的服务; - Docker 容器端口映射冲突(比如 11434 被 NAT 转发占用);
winnat服务异常,导致端口资源未正常释放。
三、补充说明(避免后续踩坑)
-
临时解决 vs 永久解决
- 你执行的
net stop/start winnat是临时方案,重启电脑后可能复现; - 永久解决:修改 Docker 容器的端口映射(比如将 11434 改为 11435),避免和
winnat抢占端口:
同时修改 Spring Boot 配置:# 启动 Ollama 容器时指定新端口(宿主机 11435 映射到容器 11434) docker run -d -p 11435:11434 --name ollama ollama/ollamaspring: ai: ollama: base-url: http://localhost:11435 # 对应新的宿主机端口
- 你执行的
-
winnat重启的副作用
重启winnat可能会临时断开依赖 NAT 的网络连接(比如 VPN、WSL2 网络、Docker 现有容器的网络),但重启后会自动恢复,无长期影响。
总结
- 核心逻辑:
winnat服务锁定了 11434 端口的绑定权限,导致 Docker 容器无法占用该端口; - 命令作用:重启
winnat释放端口锁定,让容器能正常绑定 11434 端口; - 优化方案:长期建议修改容器端口映射(如 11435:11434),避免和
winnat抢占端口资源。
更多推荐



所有评论(0)