ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Codex 启动报错 os error 10013:套接字访问权限错误的排查与修复

Codex 启动报错 os error 10013:套接字访问权限错误的排查与修复 1. Windows 下 Codex 启动报 os error 10013 到底卡在哪Codex 在 Windows 上启动时抛出os error 10013完整报错通常长这样failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。(os error 10013)。这个错误码在 Windows 的 socket 编程里对应WSAEACCES直译就是「访问权限被拒绝」。它跟「端口被别的进程占用」不是一回事——端口被占用一般报10048而10013是系统层面直接不允许你绑定这个端口。能做什么这篇文章帮你把 Codex 的登录服务重新拉起来让它能正常绑定本地回环端口。适合谁在 Windows 10/11 上跑 Codex CLI、Codex 桌面端或者任何需要本地起一个 login server 的 AI 编码工具启动时撞上 10013 的人。根因有两条主线。第一条是 WinNAT 动态端口保留Windows 装了 Hyper-V、WSL2、Docker Desktop 之后WinNAT 服务会动态保留一段 TCP 端口范围excluded port rangeCodex 登录服务默认想用的端口常见是 1455 这类如果正好落在这段保留区间里绑定就会被系统拒绝报的正是 10013。第二条是 PowerShell 权限重置 WinNAT、改端口排除范围这些操作必须管理员权限普通权限窗口执行net stop winnat会直接失败很多人以为命令没生效其实是权限不够。我试过在一台装了 Docker Desktop 的机器上复现netsh interface ipv4 show excludedportrange protocoltcp输出里 1455 赫然在列这就是典型的 WinNAT 抢端口。下面按「先查权限、再重置 WinNAT、最后配 TaoToken 通道」的顺序走一遍命令都能直接复制。2. 动手前先把 TaoToken 通道准备好Codex 这类工具启动后要连模型服务如果你用的是自建或第三方通道建议先把 Key 和 API 地址统一到一处避免启动成功却因为鉴权配置缺失又报别的错。TaoToken 提供统一的 Key 和 API 通道官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数直接填进配置即可。你需要提前做两件事。第一在控制台创建一个 API Key入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 创建后复制那串sk-开头的 Key只显示一次记得存好。第二确认你要用的模型名模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 可以看当前可用的模型列表选一个你常用的填进 config。如果你只是临时验证模型通不通可以直接在模型对话页发一条消息测试不用配本地文件。但 Codex 这种要长期跑编码任务的建议走 Coding Plan入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它更适合 Agent 和持续编码场景配额和稳定性比按次调用更省心。API Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 配置字段有疑问就翻文档。注意Key 不要写进会提交到 Git 的文件里config.toml 建议放在用户目录下别放项目仓库。3. 可复制的 WinNAT 重置与端口排除命令这一节是解决 10013 的核心。全程用管理员权限的 PowerShell 或 CMD普通窗口执行会失败。3.1 确认当前是不是管理员权限先开一个 PowerShell执行下面这行判断当前会话有没有管理员权限([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)返回True说明是管理员返回False就得关掉重开。重开方式开始菜单搜 PowerShell右键选「以管理员身份运行」。这一步至关重要后面所有net stop winnat、netsh命令都依赖它。3.2 查看端口保留范围确认 Codex 端口是否被占netsh interface ipv4 show excludedportrange protocoltcp输出是一张表每行有「起始端口」和「端口数」。假设 Codex 报错里提到的端口是 1455你就在这张表里找有没有哪一行的区间覆盖了 1455。比如看到1450 100意思是从 1450 开始保留 100 个端口1455 就在里面这就是元凶。记下这张表等会重置后要对比。3.3 重置 WinNAT 释放被保留的端口按顺序执行三条命令net stop winnat net start winnat netsh interface ipv4 show excludedportrange protocoltcpnet stop winnat停掉 Windows NAT 服务net start winnat再启动服务重启时会重新分配动态端口保留范围之前占着 1455 的那段很可能就挪走了。第三条命令再看一次保留表跟 3.2 的输出对比如果 1455 已经不在任何区间里说明释放成功。如果net stop winnat报「服务无法停止」或者「拒绝访问」八成还是权限问题回到 3.1 确认管理员状态。如果停不掉是因为有 Hyper-V 虚拟机或 WSL 正在跑先把它们关掉再试。3.4 手动排除端口可选重置后仍冲突时用有时候 WinNAT 重启后又会把端口抢回去尤其是你频繁开关 Docker/WSL。这时可以手动把 Codex 要用的端口加进排除列表让系统别动它netsh int ipv4 add excludedportrange protocoltcp startport1455 numberofports1执行完再netsh interface ipv4 show excludedportrange protocoltcp确认 1455 出现在列表里。注意手动排除是「告诉系统这个端口我要用你别保留」跟被 WinNAT 抢走是相反的效果别搞混。如果加了之后 Codex 还是报 10013先把这条删掉再走 3.3 的重置流程netsh int ipv4 delete excludedportrange protocoltcp startport1455 numberofports13.5 重启后验证 Codex 能正常启动WinNAT 重置不需要重启电脑直接重新运行 Codex 即可。如果 Codex 还是起不来重启一次系统让端口分配彻底刷新再启动 Codex观察登录服务是否正常拉起、有没有再抛 10013。4. 配好 config.toml 让 Codex 连上 TaoToken端口问题解决后Codex 启动时还要读模型配置。下面是一个 config.toml 骨架把 API 地址指向 TaoToken 的统一通道Key 换成你自己创建的# Codex 配置文件骨架放在用户目录下例如 C:\Users\你的用户名\.codex\config.toml model 你的模型名 model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat字段说明用表格对照一下更清楚字段作用填什么model指定默认模型从模型对话页选一个可用模型名base_urlAPI 基址https://taotoken.net/apienv_key从哪个环境变量读 Key自定义比如 TAOTOKEN_API_KEYwire_api接口协议类型按接入文档填常见 chatKey 不要直接写进 toml用环境变量传。在 PowerShell 里设置当前会话的环境变量$env:TAOTOKEN_API_KEY sk-你的Key想永久生效就写进用户环境变量[Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, sk-你的Key, User)设置完关掉当前终端重开让变量生效。然后启动 Codex它会读 config.toml 里的 base_url 和环境变量里的 Key走 TaoToken 通道发请求。5. 验证请求与成功结果配置完成后先别急着跑复杂任务用一条最小请求验证链路通不通。启动 Codex 后发一句简单指令比如让它解释一段代码观察返回。如果 Codex 正常输出内容说明端口绑定、鉴权、模型调用三关都过了。也可以绕过 Codex直接用 curl 打一次 API确认 Key 和地址没问题curl.exe https://taotoken.net/api/chat/completions -H Authorization: Bearer $env:TAOTOKEN_API_KEY -H Content-Type: application/json -d {\model\:\你的模型名\,\messages\:[{\role\:\user\,\content\:\ping\}]}返回里带choices字段和内容就说明通道正常。这一步能帮你把「Codex 自身问题」和「模型通道问题」分开定位——如果 curl 通但 Codex 不通问题在 Codex 配置如果 curl 也不通检查 Key 和 base_url。成功结果长这样Codex 启动时不再出现failed to start login server和os error 10013登录服务正常监听发指令能拿到模型回复。到这一步端口和通道两条线都通了。6. 本篇常见错排查6.1 net stop winnat 报拒绝访问99% 是没用管理员权限。回到 3.1 那行命令确认返回 True不是就重开管理员窗口。别在 VS Code 内置终端里直接跑那个默认不是管理员。6.2 重置后端口又被抢回去Docker Desktop、WSL2、Hyper-V 每次启动都可能重新触发 WinNAT 保留。如果反复冲突用 3.4 的手动排除把 Codex 端口固定下来或者调整 Codex 的登录端口配置如果它支持指定端口避开 WinNAT 常用的动态区间。6.3 端口释放了但 Codex 还报 10013检查是不是有安全软件或防火墙拦截了本地回环绑定。另外确认 Codex 用的端口号报错信息里通常会带别照着本文的 1455 硬套以你实际报错为准。6.4 config.toml 改了不生效Codex 读配置的路径要对Windows 下一般在用户目录的.codex文件夹。改完配置重启 Codex环境变量也要重开终端才生效。字段名拼错也会静默失效对照接入文档核对。6.5 curl 返回 401Key 没读到或写错了。确认$env:TAOTOKEN_API_KEY有值PowerShell 里用echo $env:TAOTOKEN_API_KEY看一眼。Key 只在创建时显示一次丢了就回 API Keys 页重新建一个。排障和接入相关的入口统一放这里API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你是要长期跑编码和 Agent 任务直接上 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 比按次调用省事。只想先验证模型能不能用去模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 发一条消息最快。
返回列表