本文根据 Docker 官方文档《Build, tag, and publish an image》《Publishing ports》《Docker Compose Quickstart》和 Claude Code 官方《Best practices for Claude Code》《Configure permissions》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。本站(bigolab.com)不是 Anthropic 或 Docker 官方网站。
适用于谁
- 写完了一个网站或接口服务,想放到云服务器上让别人访问的人;
- 听说「用 Docker 部署」但没做过,想让 Claude Code 带着做的人;
- 担心 AI 直接登录服务器、一通命令把线上弄坏的人。
本文只写通用做法,不绑定具体云服务商。
结论先说
- 让 Claude Code 写文件,别让它直接操作线上服务器。 它擅长生成 Dockerfile、
.dockerignore、compose 配置和部署清单;这些先在你自己的电脑上跑通,再搬到服务器。这条是本站建议。 - 先在本机验证。 Docker 官方的做法是用 Dockerfile 构建镜像,再用
docker run -p或docker compose up启动,本机能跑,上服务器出问题的概率才低。 .dockerignore要把.env排除。 Docker 官方的 Compose 入门明确说,不加.dockerignore,项目目录里的.env(可能含密钥)会被送进构建上下文,有被带进镜像层的风险。- 端口默认发布到所有网卡。 Docker 官方说,发布端口时默认监听所有网络接口,别把数据库端口随便暴露;需要时用
127.0.0.1:主机端口:容器端口只绑本机。 - 数据要放卷里。 官方说,
docker compose down会删除容器和写在容器可写层里的数据;加了-v会连命名卷一起删,数据永久丢失。

图:本站根据 Docker 官方文档:Compose 入门 整理的示意图
第一步:让它写 Dockerfile 和 .dockerignore
提示词 1:容器化,先出方案
text
我的项目是【Node.js / Python Flask / 其他】,启动命令是【npm start / python app.py】,监听端口 【3000】。
请先阅读项目,在计划模式里告诉我:
1)选哪个基础镜像(说明理由,版本固定到具体版本号,不要用 latest);
2)Dockerfile 怎么分层,依赖安装放在代码复制之前以利用缓存;
3).dockerignore 要排除哪些文件,必须包含 .env、node_modules、.git 和各种日志;
4)运行时需要哪些环境变量(只列名字,不要写值)。
我同意后再创建文件。
关于构建,Docker 官方文档说明:docker build 命令末尾的 . 是构建上下文,构建器在那里找 Dockerfile 和其他引用的文件;给镜像打标签用 -t,完整名字结构是「仓库地址/路径:标签」,不写标签默认是 latest。所以让 Claude 固定版本号、给镜像起有意义的标签,方便以后回退。
第二步:写 compose,数据放卷里,端口别乱开
提示词 2:生成 compose.yaml
text
请为这个项目写 compose.yaml:一个 web 服务(用刚才的 Dockerfile)加一个【PostgreSQL / Redis】。要求:
1)数据库的数据放命名卷里,不要放在容器可写层;
2)数据库不要发布端口到主机,只让 web 服务通过 compose 内部网络访问;
3)web 服务的端口映射写成 "127.0.0.1:8080:3000",只绑本机,等我另外配 Web 网关(如 Nginx)对外提供访问;
4)密码等敏感信息从 .env 文件读取,提供 .env.example(只写变量名和占位值),不要生成真实密码;
5)给数据库加健康检查,web 服务等它健康后再启动。
写完后运行 docker compose config 检查最终配置,并向我解释每一段。
官方文档里 docker compose config 不需要栈在运行,只根据你的文件显示 Compose 最终会应用什么,排查变量替换问题很有用。
第三步:本机跑通
提示词 3:本机验证
text
请在本机用 docker compose up -d 启动,然后:
1)用 docker compose logs -f 查看日志,确认 web 和数据库都正常启动,没有报错;
2)访问 http://localhost:8080,确认首页能打开;
3)用 docker compose exec 进入 web 服务,检查环境变量是否齐全(只检查变量名是否存在,不要把值打印出来);
4)验证数据持久化:docker compose down 之后再 up,数据还在;
5)注意:不要使用 docker compose down -v,那会删除数据卷。
如有失败,先给我原因再修。
这里的命令都来自 Docker 官方的 Compose 入门:docker compose up -d 后台启动,logs -f 持续看日志,exec 进入运行中的容器,down 停止并删除容器,down -v 会连命名卷一起删。

图:本站根据 Docker 官方文档整理的示意图
第四步:上服务器前,让它写清单,不执行
提示词 4:部署手册和回滚方案,只写文档
text
请写一份 docs/deploy.md,面向没有运维经验的人,内容:
1)服务器上要先装什么(Docker 和 Compose 插件),怎么确认装好了;
2)怎么把项目文件放到服务器(说明不要把 .env 提交到仓库,而是在服务器上单独创建);
3)首次启动的命令和检查点;
4)怎么更新版本:拉新代码、重新构建、重启,以及每一步出问题怎么回滚到上一个镜像标签;
5)服务器侧要自己确认的事:防火墙或安全组只开放必要端口、对外访问通过 Web 网关并启用 HTTPS、数据卷如何备份。
只写文档,不要执行任何会连接服务器的命令。
云服务器的安全组、证书申请、域名解析,每家服务商不一样,请看你所用服务商的官方文档,本文不展开。
更新版本时,让回退有路可走
第一次部署成功只是开始,真正容易出事的是以后的每一次更新。建议养成两个习惯。第一,每次构建都给镜像打一个能对应到代码版本的标签,比如日期或提交编号,而不是一直覆盖 latest;Docker 官方的镜像命名里,标签就是用来区分不同版本或变体的,不写标签时才默认是 latest。第二,更新前先记下当前正在运行的镜像标签,出问题时直接换回旧标签重启即可。你可以在上面那份 docs/deploy.md 里让 Claude 把这两步写成固定动作,每次更新都照着做,而不是临场发挥。
为什么别让它直接动线上
Claude Code 官方的权限机制是为了让你保持控制:默认会在运行命令前询问。线上服务器的特点是:一旦命令出错就影响真实用户,而且很多操作不可逆(删卷、覆盖配置、重启数据库)。建议:
- 部署由你自己执行,Claude 负责写和解释;
- 要让它协助时,也只用于只读检查,例如读日志、看磁盘占用;
- 在
.claude/settings.json里把有风险的命令设为每次询问,例如(本站按官方规则写法拼的):
json
{
"permissions": {
"ask": ["Bash(ssh *)", "Bash(scp *)", "Bash(docker push *)", "Bash(docker compose down *)"],
"deny": ["Read(./.env)", "Read(./.env.production)"]
}
}
权限规则的说明见 /guides/claude-code-permission-modes,如果你想在服务器上直接运行 Claude Code,见 /guides/claude-code-ssh-remote-server,但要考虑它对线上环境的影响。密钥的整体原则见 /guides/ai-coding-security-secrets-permissions。
常见问题
Q:容器起来了,浏览器访问不到?
先看端口映射:HOST_PORT:CONTAINER_PORT 左边是主机端口,右边是容器内程序监听的端口。官方例子是主机 8080 转发到容器 80。再看程序是不是只监听了 127.0.0.1(容器里需要监听 0.0.0.0 才能被映射出来),这一条是通用常识,不是官方原话。
Q:想让它部署到 Docker 以外的平台?
本文只讲 Docker 和通用思路,其他平台请以其官方文档为准。
订阅和额度
部署类任务读取的文件不多,但调试日志可能很长。订阅选择见 /chongzhi/claude-code,价格和额度以官方页面当前显示为准。
相关教程
- /guides/claude-code-backend-api-database-mcp:写后端接口、连数据库
- /guides/claude-code-sandbox-security:沙箱与安全
- /guides/dify-docker-compose-self-host:Docker Compose 自建示例
参考资料
- Docker 文档:Build, tag, and publish an image — https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image/
- Docker 文档:Publishing ports — https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/
- Docker 文档:Docker Compose Quickstart — https://docs.docker.com/compose/gettingstarted/
- Claude Code 文档:Configure permissions — https://code.claude.com/docs/en/permissions
0 条评论
还没有评论,来抢沙发~