# 容器化部署产物正反例

正例描述产物边界，不应直接复制镜像、端口或凭据。必须与当前工程和部署方案一致。本例使用 Docker Compose、关系型数据库和 Playwright，它们只在项目实际采用时适用。

## 正例

- `deploy/docker-compose.yml` 为 API、数据库声明健康检查和 `depends_on.condition=service_healthy`
- API Dockerfile 使用构建态与运行态分离，运行态使用非 root 用户，只复制运行所需文件
- 数据库数据使用命名卷；密码通过未入库的 env 文件或密钥注入
- `playwright.config.ts` 的 `webServer` 启动真实组合环境，失败时保留 trace
- 验证：`docker compose config`、`docker compose build`、`docker compose up --wait`、HTTP 冒烟和 Playwright 都记录真实结果

## 反例

```dockerfile
FROM node:latest
COPY . .
ENV DB_PASSWORD=123456
CMD npm start
```

问题：镜像不可复现、包含无关与敏感文件、以默认高权限运行，也没有健康检查或组合验证。

### 部署链核对反例

- 只确认代码已 push 就让用户实测——镜像没重建或前端产物没上传，用户测到的还是旧版本，误报一轮「修复无效」。
- 构建钩子只在本地跑通过就挂上——Docker builder 镜像里没有钩子依赖的工具链，CI 构建直接红。

问题：部署链每一环都是独立失效点；「我以为部署了」是假性缺陷的最大来源。

## 迁移到当前项目

替换构建工具、产物路径、基础镜像、端口、用户、依赖和健康检查。必须在当前仓库实际构建、启动和探活；示例镜像与命令不能直接复制。
