Claude Code Docker Sandbox 时区隔离教程封面

用 Docker Sandbox 跑 Claude Code,规避时区指纹

最近 Reddit 有一篇关于 Claude Code 的爆料,核心说的是:从 2.1.91 版本起,Claude Code 在检测到你启用代理时,会额外做一组环境判断。

据那篇爆料,它主要做两件事:

  1. 查系统时区,看是不是 Asia/ShanghaiAsia/Urumqi
  2. 查代理 URL,判断是否指向中国域名、是否命中某个域名清单、是否跟中国 AI 实验室相关。

更让人在意的是回传方式。爆料称它不是明着把这些字段作为普通日志上报,而是把判断结果“藏”进系统提示词里:比如把日期从 2026-06-30 改成 2026/06/30,再用几个长得几乎一样、肉眼很难分辨的 Unicode 撇号去编码不同组合,例如 ' / ʼ / ʹ,对应“中国时区 / 中国代理 / AI Lab 关联”等状态。

发帖人还说,相关逻辑在二进制里做了 XOR 混淆,更新日志里也没有提到这项变化。

本文给一个干净的技术方案:把 Claude Code 关进沙箱跑,并在沙箱里控制时区,让它采集不到你的真实时区。

不过先提醒:最好是账户注册 IP、日常使用 IP、时区都一致来最小化特征。

思路

用 Docker 官方的 Sandboxes(sbx 在隔离 microVM 里跑 agent。每个沙箱有独立的文件系统、网络和基础镜像,碰不到宿主机。关键点有两个:

  • 沙箱基础镜像本身不是中国时区
  • 你再注入一个干净的 TZ,Claude 无论从哪儿读,都拿不到 Asia/Shanghai

1. 安装 sbx

前置要求见 Docker 官方文档:

https://docs.docker.com/ai/sandboxes/

macOS:

brew install docker/tap/sbx
sbx login

Windows:

winget install -h Docker.sbx
sbx login

Linux(Ubuntu):

curl -fsSL https://get.docker.com | sudo REPO_ONLY=1 sh
sudo apt-get install docker-sbx
sudo usermod -aG kvm $USER
newgrp kvm
sbx login

安装完成后确认命令可用:

sbx --help

2. 启动 Claude(带上时区)

进项目目录,设好时区再跑:

cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run claude

时区按需替换。常用哪个时区,就把 TZ 设成对应的 IANA timezone。

常见 IANA timezone 示例:

export TZ=America/Los_Angeles
export TZ=America/New_York
export TZ=Europe/London
export TZ=Asia/Tokyo

3. 推荐:指定 sandbox 名称

为了后面验证方便,可以显式指定 sandbox 名称:

cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run --name claude-{xxx-project} claude

后续验证命令里的 claude-{xxx-project} 就用这个名字。

如果你没有指定名称,可以用 claude

查看当前正在运行的 sandbox:

sbx ls

4. 注意:直接 export TZ && claude 不生效

在宿主机上直接执行:

export TZ=America/Los_Angeles && claude

这个方式不好使

实测 Claude 这种情况下读到的仍是系统时区。宿主机系统时区如果还是 Asia/Shanghai,光设环境变量盖不住,它“不认”你临时 export 的这个变量。

沙箱能生效,是因为镜像默认是 UTC 时区,但是运行时会带入你的宿主机时区,所以可以通过修改修改环境变量来影响 sendbox 容器生成时带入的环境变量,来修改掉时区。这是宿主机直接 export 做不到的。

5. 验证时区已生效

容器跑起来后,查 Claude 进程的环境变量,确认 TZ 注入成功:

sbx exec -it claude-{xxx-project} sh -c 'pid=$(ps -ef | awk '\''$8=="claude"{print $2; exit}'\''); [ -n "$pid" ] || { echo "claude pid not found" >&2; exit 1; }; tr "\0" "\n" < "/proc/$pid/environ" | grep "^TZ="'

{xxx-project} 换成你的项目名或实际 sandbox 名称。

输出里出现:

TZ=America/Los_Angeles

即为成功。

如果你设置的是其他时区,输出应该对应你的设置,例如:

TZ=Europe/London

6. 没看到 TZ 怎么排查

先查 sandbox 名称:

sbx ls

然后确认 Claude 进程是否存在:

sbx exec -it claude-{xxx-project} sh -c 'ps -ef | grep claude'

再进入 sandbox 看环境:

sbx exec -it claude-{xxx-project} sh
ps -ef # 找Claude对应的pid
cat /proc/{claude pid}/environ # 找其中的TZ=xxx环境变量是否是设定的值

常见原因:

  • export TZ=... 没有放在 sbx run claude 之前;
  • sbx exec 里的 sandbox 名称写错;
  • Claude 进程还没启动成功;
  • 你启动的是另一个 sandbox。

7. 停止和删除 sandbox

停止:

sbx stop claude-{xxx-project}

删除:

sbx rm claude-{xxx-project}

总结命令

最小启动:

cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run claude

推荐启动:

cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run --name claude-{xxx-project} claude

验证:

sbx exec -it claude-{xxx-project} sh -c 'pid=$(ps -ef | awk '\''$8=="claude"{print $2; exit}'\''); [ -n "$pid" ] || { echo "claude pid not found" >&2; exit 1; }; tr "\0" "\n" < "/proc/$pid/environ" | grep "^TZ="'

看到:

TZ=America/Los_Angeles

就代表设置成功。

如果账号还是一直被封

上面这套方案解决的是 Claude Code 本地运行环境和时区指纹问题,但它不能解决账号注册、支付方式、地区限制、风控封号等问题。

如果你已经被 Claude / OpenAI 账号反复封禁,或者不想把开发流程一直绑在不稳定的官方账号上,可以考虑使用 YYLX.IO 鱼鱼连线 AI 中转站。通过中转站接入 Claude Code、Codex、ChatGPT 兼容客户端等工具,可以减少账号和支付带来的折腾,把精力放回开发本身。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注