浏览 AI 知识库
Docker 项目部署教程:先说明端口、卷、环境变量和健康检查
容器显示 Up,只说明进程还在。端口、卷、环境变量、依赖和健康检查要一起验证,才能确认服务可访问、数据也不会随重建消失。
按实际操作顺序推进
每完成一段就检查当前输出,确认结果符合预期后再继续。
Docker 容器已经 Up,浏览器为什么还是打不开
容器显示 Up,浏览器却打不开;重建后上传文件全部消失。Dockerfile 能构建不代表端口、卷和健康契约正确。
- 端口与监听地址一致
- 持久卷经重建验证
- 健康、日志和停止行为正常
动手前,把材料和不能改的部分定下来
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | Node 服务监听容器 3000;主机希望暴露 8080;上传目录 `/app/data`;数据库在独立服务。 |
| 不能越过的边界 | 说明端口、网络、卷、变量、用户、健康和停止;持久数据不写容器层;秘密不进镜像。 |
| 要交付的结果 | 容器运行契约 |
Docker 项目部署教程,从“镜像与命令”开始做
镜像与命令
写基础镜像、目标架构、构建上下文、启动命令和非 root 用户要求。
端口与网络
区分容器监听端口、宿主映射、服务名和外部入口,说明是否经过代理。
卷与数据
标持久化目录、只读挂载、初始化和备份;明确删除容器是否应保留数据。
变量与密钥
列名称、来源、必填、默认和重启影响,不把生产值放进 Compose 或镜像层。
健康与依赖
健康检查使用真实就绪条件,依赖服务有超时和重试;启动顺序不替代可用性判断。
端口能访问,不代表数据和健康检查正确
| 项 | 示例输入 | 验证 | 失败处理 |
|---|---|---|---|
| 端口 | 容器 8080,宿主 18080 | 从代理和本机各请求一次 | 核对监听与映射,不改外部入口 |
| 卷 | data/ 持久化,配置只读挂载 | 删除容器后重建并读取数据 | 恢复备份,避免误删卷 |
| 变量 | DB_URL 来自环境,缺失即拒绝启动 | 值不出现在镜像和日志 | 修注入来源,不写死默认 |
| 健康 | 检查真实就绪接口 | 重启、慢依赖和失败状态 | 不把进程存活当服务可用 |
端口、目录和变量为演示;真实契约按项目 compose/部署目标确认。
完成后的容器运行契约
运行契约映射 `8080:3000`,命名卷挂 `/app/data`,健康检查访问 `/healthz`。重建容器前后测试文件哈希一致;容器日志无秘密,非 root 用户运行,依赖服务未就绪时健康为失败。
为什么“健康检查通过,功能接口仍失败”还不能交付
健康检查通过,功能接口仍失败
- 原因
- 健康只返回固定 200,没有检查关键依赖
- 怎么改
- 区分存活与就绪检查,关键流程另做外部冒烟测试
