分享在 Docker 容器内集成 Claude Code 和 VSCode 的工作流,为程序员提供一致的开发环境解决方案。
昨晚,我完成了从之前使用的旧 AI 编码方案到在 Docker 中运行 Claude Code 的过渡。我使用了 VSCode 的"Dev Container"功能。在这篇文章中,我分享了一些想要切换方案的原因,也为那些想这样做的人提供了一个简短的指南。如果你只是想要指南和代码(一个小文件),这里是:https://github.com/tim-sha256/claude-in-docker
到昨天为止,我一直在使用这样的设置:
ChatGPT Plus 20 美元订阅,用于偶尔的聊天,大多数与代码无关,除了一些快速处理和将 o3 喂以大量 Claude 无法破解的代码以期得到解决的绝望尝试(大多数情况下不成功)。
Cursor Pro 额外花费 20 美元(或者他们现在怎么叫它?)- 用于所有"严肃"的编码。
这套方案效果还不错,很方便(从 2024 年 8 月开始就一直用 Cursor,从 2023 年开始用 GPT,没有主动寻找替代方案),但最近开始有一些问题困扰我。
在 Cursor 最近进入"消耗用户"阶段之前,我在一个月工作 1-2 个项目期间(大约 40-60 小时/月)从未用完过每月 500 次请求。也许我本来可以选择按 token 计费的计划花更少的钱,但我当时没有真正在意——20 美元就是 20 美元 :)
但在他们更新移除 500 次请求限制"所以你可以享受几乎任何模型的无限请求"之后,Cursor 由于他们不合理的速率限制让我非常失望。有时我会输入一个针对 Sonnet 4 的提示(甚至不是 Opus...),然后等待 2-5 分钟才能看到任何反应。这是我在 Cursor 相关聊天和 Reddit 上看到很多的抱怨。
有一个选项可以切换回一个专有的、似乎利润不高的 500 次请求定价模式,但我不认为它会持续太久。或者使用免费版本,在每次请求后都要出去抽根烟。
这让我开始思考我的支出和我获得的满意度:40 美元还值得吗,还是有更好的办法?
好吧,现在我已经确定了 Claude 20 美元订阅,我认为它更适合我的用例,有几个原因:
我仍然可以给我手机上的某个聊天应用发一张堆满各种清洁用品的架子的照片,并问"我需要哪些来做 X?",这几乎总是出人意料地有效
我有一个相似甚至更好的网络聊天体验来处理与代码无关的事情
最后,也是最重要的 - 我得到 Claude Code,具有:
好吧,看起来我现在已经确定了,故事到此结束。或者还有什么?
简单来说:我相信运行一个可以访问你整个文件系统、终端和密钥的 AI Agent 是危险的,最终会导致一些问题。
把它想象成你给你的计算机访问权限给一个你不太认识、只能通过聊天交流的便宜海外自由开发者。这听起来怎么样?
我每天都会遇到与 llm 安全相关的东西,偶尔会读一些。总的来说,情况并没有好转。
例如,我看到过大约 10 篇关于 MCPs 中非常严重漏洞的帖子,比如这一个,一些悲伤的故事说 cursor 决定删除一些有用的东西,比如使用 rm -rf 的所有 Ableton 项目,甚至有线程说 Claude 在 Yolo 模式下学会了绕过 Cursor 内置命令黑名单。
基本上,你有一个选择:要么手动接受每一条命令(我认为这是一个合理的方法,但我太懒了),要么信任上面提到的自由开发者拥有你所有的东西,并希望一些障碍会阻止他,什么坏事都不会发生。
或者还有其他选择吗?
好吧,所以我想使用 Claude Code,但同时我想以某种方式限制它,使它不能搞砸我的整个计算机。我想到的第一个想法证明是我会坚持的想法(谁会想到):把这个东西放进一个盒子里,里面只有项目,给它尽可能少的访问,然后关上盒子。换句话说,在 Docker 中启动 Claude Code 并在容器内部工作在项目上。
你从中获得的是:
Claude 只能访问容器内的文件或提供的卷、挂载或未挂载
它肯定也不能破坏容器外的任何东西 - 最坏的情况是容器损坏并停止
由于容器有隔离的环境,Claude 无法访问你的本地密钥(比如你的 SSH 密钥),也无法在你知道之前使用任何外部集成,除非你给它访问权限
好吧,听起来不错。设置和使用容易吗?
是的!实际上,如果你已经本地安装了 Docker 和 VSCode,开始使用大约需要 5 分钟。
好吧,这是你需要安装并设置以完成这个简短指南的内容:
假设你已经拥有所有这些,我们继续。
你需要创建一个文件夹,该文件夹将作为 Claude 和你的项目的根文件夹。在其中,你需要创建一个名为 .devcontainer 的文件夹,在其中创建一个 devcontainer.json 文件。
从 Github 复制文件的内容,或者简单地克隆我创建的仓库,它将同时拥有所需的结构和文件:
git clone https://github.com/tim-sha256/claude-in-docker.git
在 VSCode 中打开根文件夹(如果你克隆了仓库,则是 claude-in-docker),然后砰——这个模态窗口应该显示在角落:
点击"Reopen in Container"并等待一段时间。就这样!你可以通过在打开的终端中运行 claude 命令来检查 Claude Code 是否已安装:
由于你在一个隔离的环境中,如果你尝试 git clone / pull / push 等,你会遇到一个错误,因为你的容器不包括任何凭证,也无法访问你的本地 SSH 密钥(如果你在本地使用它们进行 Github 身份验证)。
第一个想到的是在容器内生成一个单独的 SSH 密钥并将其添加到你的账户,但我决定走另一条路,使用 Fine-Grained access token。因为你无法真正控制特定 SSH 密钥的权限,如果你为 Claude 环境添加一个新的,你可能会给 Claude 很多它不应该拥有的权限——比如查看和编辑你的详情、管理设置等。
经过简短的谷歌搜索后,我找到了适合我(以及可能你)的选项:
转到 https://github.com/settings/personal-access-tokens/new 并创建一个新的 fine-grained token。给它访问你想要的任何仓库。
在权限设置中,打开"Repository permissions"切换,滚动到"Contents"并选择"Read and write"访问级别。
这一个权限足以进行基本的 git 操作(clone / pull / push 等),如果你不是某个 git 大师,你可能永远不需要任何额外的权限。我们准备好了 - 现在选择"Generate token"并复制它,安全地存储它,等等,你知道流程。
好!现在 Claude 没有选择为了乐趣而搞砸你的 GitHub 账户。为了添加这些凭证并在将来使用它们,你可以通过运行这个命令简单地克隆你有访问权限的某个私有仓库:
git clone https://<USERNAME>:<TOKEN>@github.com/<USERNAME>/<REPO-NAME>.git
然后在克隆后 cd 进项目文件夹并运行这个来保存你的凭证:
git remote set-url origin https://<USERNAME>:<TOKEN>@github.com/<USERNAME>/<REPO-NAME>.git
万岁!你已经准备好使用 Claude 进行编码,可能比以前的风险更少(否则你为什么要读到这里)。
感谢你的阅读!几个注意事项:
我没有测试 1001 种不同的方法并选择了最好的一个。可能有一个更好的(更便宜、更安全、等等)方式来做这个,虽然我认为这对大多数人来说应该足够好了。
如果你知道这个方法或指南中有什么可以改进的 - 请考虑在下面留下评论或给我发送电子邮件至 [email protected]。