tcm_expert_builder / Dockerfile_bak_success
leonsimon23's picture
Rename Dockerfile to Dockerfile_bak_success
56edfc5 verified
# 使用官方Python 3.10 slim镜像
FROM python:3.10-slim
# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
build-essential \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 克隆代码
RUN --mount=type=secret,id=GH_USER \
--mount=type=secret,id=GH_TOKEN \
git clone https://$(cat /run/secrets/GH_USER):$(cat /run/secrets/GH_TOKEN)@github.com/leoncool23/tcm_expert_builder.git .
# 创建详细诊断脚本
RUN echo '#!/bin/bash' > diagnose.sh && \
echo 'echo "=== 详细项目诊断 ==="' >> diagnose.sh && \
echo 'echo "=== models目录结构 ==="' >> diagnose.sh && \
echo 'ls -la models/' >> diagnose.sh && \
echo 'echo "=== models/schemas.py 内容预览 ==="' >> diagnose.sh && \
echo 'head -20 models/schemas.py' >> diagnose.sh && \
echo 'echo "=== 检查 ClinicalFinding 类 ==="' >> diagnose.sh && \
echo 'grep -n "class.*ClinicalFinding" models/schemas.py || echo "未找到 ClinicalFinding 类"' >> diagnose.sh && \
echo 'echo "=== 检查所有类定义 ==="' >> diagnose.sh && \
echo 'grep -n "^class " models/schemas.py || echo "未找到任何类定义"' >> diagnose.sh && \
echo 'echo "=== services/bn_manager.py 导入语句 ==="' >> diagnose.sh && \
echo 'grep -n "from models.schemas import" services/bn_manager.py' >> diagnose.sh && \
chmod +x diagnose.sh
# 运行诊断
RUN ./diagnose.sh
# 创建修复脚本(临时解决方案)
RUN echo '#!/bin/bash' > fix_imports.sh && \
echo 'echo "=== 尝试修复导入问题 ==="' >> fix_imports.sh && \
echo '# 检查 models/schemas.py 中实际存在的类' >> fix_imports.sh && \
echo 'echo "实际存在的类:"' >> fix_imports.sh && \
echo 'python -c "' >> fix_imports.sh && \
echo 'import sys' >> fix_imports.sh && \
echo 'sys.path.insert(0, \"/app\")' >> fix_imports.sh && \
echo 'try:' >> fix_imports.sh && \
echo ' import models.schemas as schemas' >> fix_imports.sh && \
echo ' print(\"可用的类和函数:\", [name for name in dir(schemas) if not name.startswith(\"_\")])' >> fix_imports.sh && \
echo 'except Exception as e:' >> fix_imports.sh && \
echo ' print(\"导入models.schemas失败:\", e)' >> fix_imports.sh && \
echo '"' >> fix_imports.sh && \
chmod +x fix_imports.sh
# 运行修复脚本
RUN ./fix_imports.sh
# 设置Python环境
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 配置NLTK和ChromaDB
ENV NLTK_DATA=/usr/local/share/nltk_data
RUN mkdir -p $NLTK_DATA && \
python -m nltk.downloader -d $NLTK_DATA punkt
ENV ANONYMIZED_TELEMETRY=False
# 创建必要目录
RUN mkdir -p uploads data/vector_db
# 创建用户
RUN useradd --create-home --shell /bin/bash appuser && \
chown -R appuser:appuser /app
USER appuser
EXPOSE 7860
# 启动时先诊断再启动
CMD ["bash", "-c", "./diagnose.sh && ./fix_imports.sh && echo '=== 尝试启动应用 ===' && gunicorn --workers 1 --bind 0.0.0.0:7860 --pythonpath /app app:app"]