解决 Codex 沙箱报错问题(apply_patch 调用失败)

shumtin 2026-06-30 14:05 1

Codex 调用 apply_patch 一直报错,尝试过让它自己修,但是一直没解决。
Bs0o0rtD4bbRboTviZXqDQPrrxV2k938.webp




今天发现了这个报错的根本原因:
Codex 本身需要使用代理,但沙箱辅助程序也继承了代理环境变量。
之前为了解决 Codex 每次回复前都要 reconnecting 5 次的问题,设置了 Codex 走本地代理


HTTP_PROXY="http://127.0.0.1:10808"
HTTPS_PROXY="http://127.0.0.1:10808"
ALL_PROXY="socks5h://127.0.0.1:10808"
NO_PROXY="localhost,127.0.0.1,::1"

这导致 Codex 在~\.codex\sandbox\setup_marker.json这个文件中反复写入:


"proxy_ports": [ 10808 ],

随后,当执行 apply_patch 时,会触发 codex-windows-sandbox-setup.exe。这个程序会尝试刷新 Windows 沙箱/防火墙状态,于是产生 COM+ 错误。


简单说就是:Codex 主程序可以用代理,但沙箱 helper 不能继承这些代理变量;否则它会反复把代理端口写回配置文件,导致 apply_patch 触发沙箱/防火墙刷新时报错。


但是单独清空 setup_marker.json 并不能持久解决问题,因为旧的 Codex 进程仍然在它们自己的进程环境中保留着这些代理变量,并且会把代理端口再次写回去。


推荐解决方法:保留 Codex 网络代理,但禁止沙箱继承代理环境变量
先完全退出 Codex ,包括托盘和后台进程。然后打开config.toml,在里面加入或合并下面内容:


[features]
network_proxy = true

[shell_environment_policy]
inherit = "all"
exclude = [
"HTTP_PROXY",
"HTTPS_PROXY",
"ALL_PROXY",
"http_proxy",
"https_proxy",
"all_proxy"
]

shell_environment_policy.exclude 可用于移除传给子进程的环境变量,inherit 控制子进程继承环境变量的范围。
这里的逻辑是:Codex 自己仍然可以使用网络代理,但执行工具、沙箱命令、apply_patchGet-Content 等子进程时,不再继承这些代理变量


然后用 PowerShell 结束残留 Codex 进程:


Get-Process | Where-Object { $_.ProcessName -match "codex|openai" } | Stop-Process -Force

再清理一次沙箱 marker ,打开setup_marker.json:
找到类似:


"proxy_ports": [10808]

改成:


"proxy_ports": []

保存后重新启动 Codex ,再测试 apply_patch 、读取文件、查看图片等操作,可以直接让 Codex 执行以下操作简单测试:


请创建一个 apply_patch_test.txt ,内容写入 hello ,然后用 apply_patch 把 hello 改成 hello codex 。


若不报错则代表修复成功。


如果继续出现这个错误,只能考虑临时改成 unelevated 沙箱。

最新回复 (7)
  • oldManNewThought 06-30 14:09
    1
    牛逼,我也一直受这个问题困扰,让 codex 自己修,各种改,各种出问题,最后又回退到 elevated ,后面强制其使用 powershell,我试试你这方案
  • Mmnni 06-30 14:49
    2
    我上周也遇到这个问题,让它自己改好了
  • oldManNewThought 06-30 15:21
    3
    大哥不行啊,前面测试 apply_patch 通过了,但是后面再用,又弹窗,然后失败,跟着我打开 setup_marker.json,发现 proxy_ports 又有值了。。。
  • shumtin 楼主 06-30 15:36
    4
    @oldManNewThought 是不是 config.toml 没改好?我现在三台设备都是这样操作,完全正常,proxy_ports 没值的
  • shumtin 楼主 06-30 17:44
    5
    @oldManNewThought 我测试了一下确实还存在问题,你可以先把 network_proxy 改成 false ,可以保证本地 apply_patch 正常调用,但是沙箱就没法联网了
  • oldManNewThought 07-01 08:18
    6
    @shumtin #5 这样不完美,大家一起再研究研究
  • shumtin 楼主 07-01 08:36
    7
    @oldManNewThought 似乎是这次更新的原因,我之前是老版本这样是可以的,更新之后出了问题,后续再研究一下
* 帖子来源V2EX
返回