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 服务异常,导致端口资源未正常释放。

三、补充说明(避免后续踩坑)

  1. 临时解决 vs 永久解决

    • 你执行的 net stop/start winnat临时方案,重启电脑后可能复现;
    • 永久解决:修改 Docker 容器的端口映射(比如将 11434 改为 11435),避免和 winnat 抢占端口:
      # 启动 Ollama 容器时指定新端口(宿主机 11435 映射到容器 11434)
      docker run -d -p 11435:11434 --name ollama ollama/ollama
      
      同时修改 Spring Boot 配置:
      spring:
        ai:
          ollama:
            base-url: http://localhost:11435  # 对应新的宿主机端口
      
  2. winnat 重启的副作用
    重启 winnat 可能会临时断开依赖 NAT 的网络连接(比如 VPN、WSL2 网络、Docker 现有容器的网络),但重启后会自动恢复,无长期影响。

总结

  1. 核心逻辑:winnat 服务锁定了 11434 端口的绑定权限,导致 Docker 容器无法占用该端口;
  2. 命令作用:重启 winnat 释放端口锁定,让容器能正常绑定 11434 端口;
  3. 优化方案:长期建议修改容器端口映射(如 11435:11434),避免和 winnat 抢占端口资源。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐