shumtin
V2EX  ›  Codex

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

  •  
  •   shumtin · Jun 30 · 515 views

    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 沙箱。

    9 replies    2026-07-02 10:28:00 +08:00
    oldManNewThought
        1
    oldManNewThought  
       Jun 30
    牛逼,我也一直受这个问题困扰,让 codex 自己修,各种改,各种出问题,最后又回退到 elevated ,后面强制其使用 powershell,我试试你这方案
    Mmnni
        2
    Mmnni  
       Jun 30
    我上周也遇到这个问题,让它自己改好了
    oldManNewThought
        3
    oldManNewThought  
       Jun 30
    大哥不行啊,前面测试 apply_patch 通过了,但是后面再用,又弹窗,然后失败,跟着我打开 setup_marker.json,发现 proxy_ports 又有值了。。。
    shumtin
        4
    shumtin  
    OP
       Jun 30
    @oldManNewThought 是不是 config.toml 没改好?我现在三台设备都是这样操作,完全正常,proxy_ports 没值的
    shumtin
        5
    shumtin  
    OP
       Jun 30
    @oldManNewThought 我测试了一下确实还存在问题,你可以先把 network_proxy 改成 false ,可以保证本地 apply_patch 正常调用,但是沙箱就没法联网了
    oldManNewThought
        6
    oldManNewThought  
       1 day ago
    @shumtin #5 这样不完美,大家一起再研究研究
    shumtin
        7
    shumtin  
    OP
       1 day ago
    @oldManNewThought 似乎是这次更新的原因,我之前是老版本这样是可以的,更新之后出了问题,后续再研究一下
    shumtin
        8
    shumtin  
    OP
       20h 42m ago
    @oldManNewThought 刚刚为了测试,我把 config.toml 里修改的内容全都回退了,清空 proxy_ports,然后把进程清理干净重启 codex,发现不报错了,setup_marker.json 也没有自动更新.目前没搞清楚什么原因,使用了 2 小时一切正常.
    daxy223
        9
    daxy223  
       1h 5m ago via iPhone
    为什么不用 tun
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5618 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 214ms · UTC 03:33 · PVG 11:33 · LAX 20:33 · JFK 23:33
    ♥ Do have faith in what you're doing.