添加完整的 Docker 启动问题修复报告,包括: - 4 个问题的详细说明 - 每个问题的原因分析 - 具体的修复方案 - 验证结果和访问方式 所有问题已解决,应用现在可以正常启动。 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
3.8 KiB
Docker 启动问题修复报告
修复日期: 2026-05-14
修复状态: ✅ 完成
问题概述
Docker Compose 启动失败,前端编译错误和后端导入错误导致服务无法启动。
修复内容
1. 前端 SCSS 编译依赖问题
问题: npm run build 失败,提示缺少 sass-embedded 依赖
原因: 新增的 Vue 组件(ApiPermissions.vue、PermissionMonitoring.vue 等)使用了 SCSS 样式,但 package.json 中没有安装 sass-embedded
修复:
// frontend/package.json
{
"devDependencies": {
"sass-embedded": "^1.77.0" // 新增
}
}
文件: frontend/package.json
2. Vite 路径别名配置问题
问题: Vite 构建时无法解析 @/ 路径别名,导致导入失败
原因: vite.config.ts 缺少 resolve.alias 配置
修复:
// frontend/vite.config.ts
import { fileURLToPath } from "node:url";
export default defineConfig({
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
文件: frontend/vite.config.ts
3. 后端循环导入问题
问题: 后端启动时出现循环导入错误
ImportError: cannot import name 'get_project_role_permissions' from partially initialized module 'app.core.project_permissions'
原因:
permission_cache.py在模块级别导入project_permissions.py中的函数project_permissions.py也导入permission_cache.py中的函数- 形成了循环导入
修复: 使用延迟导入,在方法内部导入所需的函数
# backend/app/core/permission_cache.py
async def get_project_role_permissions(self, db, study_id, ttl=None):
# 延迟导入,避免循环导入
from app.core.project_permissions import get_project_role_permissions as _get_project_role_permissions
# ... 使用 _get_project_role_permissions
文件: backend/app/core/permission_cache.py
4. 后端缺失常量问题
问题: 导入错误,缺少 PROJECT_PERMISSION_ROLES 常量
ImportError: cannot import name 'PROJECT_PERMISSION_ROLES' from 'app.core.api_permissions'
原因: api_permissions.py 中定义了 API_ENDPOINT_PERMISSIONS 但没有定义 PROJECT_PERMISSION_ROLES,而 api_permissions.py 路由文件需要导入这个常量
修复: 在 api_permissions.py 末尾添加常量定义
# backend/app/core/api_permissions.py
PROJECT_PERMISSION_ROLES = ["PM", "CRA", "PV", "MEDICAL_REVIEW", "IMP", "QA"]
文件: backend/app/core/api_permissions.py
修复提交
| 提交 | 文件 | 说明 |
|---|---|---|
77b16ffa |
frontend/package.json | 添加 sass-embedded 依赖 |
7b397640 |
frontend/vite.config.ts | 添加 Vite 路径别名配置 |
fdf64069 |
backend/app/core/permission_cache.py | 解决循环导入问题 |
50106452 |
backend/app/core/api_permissions.py | 添加缺失的常量 |
验证结果
服务状态
NAME IMAGE STATUS
ctms_backend ctms_dev-backend Up (健康)
ctms_db postgres:15-alpine Up (健康)
ctms_nginx ctms_dev-nginx Up (健康)
功能验证
✅ 前端编译成功
✅ 后端启动成功
✅ Nginx 代理正常
✅ 数据库连接正常
✅ 应用可访问
访问方式
- 前端应用: http://localhost:8888
- 后端 API: http://localhost:8000
- 数据库: localhost:5432
总结
所有 Docker 启动问题都已修复,应用现在可以正常启动和运行。修复涉及:
- 前端依赖: 添加 SCSS 编译器依赖
- 前端配置: 配置路径别名解析
- 后端代码: 解决循环导入和缺失常量问题
所有修复都是最小化的,不影响现有功能,只是补充了缺失的配置和依赖。
修复完成: ✅ 2026-05-14