FROM python:3.13 # 安装完整的构建依赖 RUN apt-get update && apt-get install -y \ git \ build-essential \ cmake \ g++ \ gcc \ libboost-all-dev \ libboost-python-dev \ python3-dev \ && rm -rf /var/lib/apt/lists/* # 升级 pip 和构建工具 RUN python -m pip install --upgrade pip setuptools wheel # 安装编译依赖 RUN pip install --no-cache-dir Cython numpy scipy # 诊断:找到所有 boost_python 库 RUN echo "=== Detecting boost_python libraries ===" && \ find /usr/lib -name "*boost_python*.so*" 2>/dev/null | tee /tmp/boost_libs.txt && \ ldconfig -p | grep boost_python | tee -a /tmp/boost_libs.txt # 自动创建符号链接 RUN BOOST_LIB=$(find /usr/lib -name "libboost_python*.so" | head -1) && \ if [ -n "$BOOST_LIB" ]; then \ echo "Found boost library: $BOOST_LIB"; \ ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python310.so; \ ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python-py310.so; \ ln -sf "$BOOST_LIB" /usr/lib/x86_64-linux-gnu/libboost_python3.so; \ echo "Created symlinks"; \ fi # 验证链接 RUN ls -la /usr/lib/x86_64-linux-gnu/libboost_python* || echo "No boost_python libs found" # 创建用户 RUN useradd -m -u 1000 user WORKDIR /app # 复制代码 COPY --chown=user . /app # 编译 medpy(以 root 身份) USER root WORKDIR /app/medpy/source # 清理 RUN rm -rf build/ dist/ *.egg-info medpy/graphcut/*.so medpy/graphcut/*.cpp # 设置编译环境变量 ENV CFLAGS="-I/usr/include/python3.10" ENV LDFLAGS="-L/usr/lib/x86_64-linux-gnu" # 尝试编译,记录详细日志 RUN echo "=== Starting compilation ===" && \ python setup.py build_ext --inplace --force --verbose 2>&1 | tee /tmp/medpy_build.log; \ BUILD_STATUS=$?; \ echo "=== Build exit code: $BUILD_STATUS ===" && \ if [ $BUILD_STATUS -ne 0 ]; then \ echo "=== BUILD FAILED - Last 50 lines of log ===" && \ tail -50 /tmp/medpy_build.log && \ echo "=== Checking for .so files ===" && \ find . -name "*.so" && \ exit 1; \ fi # 验证编译 RUN echo "=== Verifying maxflow ===" && \ python -c "from medpy.graphcut.maxflow import GraphDouble; print('SUCCESS: maxflow loaded')" || \ (echo "FAILED to import maxflow" && cat /tmp/medpy_build.log && exit 1) # 安装 RUN pip install -e . # 切换回普通用户 USER user ENV PATH="/home/user/.local/bin:$PATH" WORKDIR /app # 安装其他依赖 COPY --chown=user ./requirements.txt requirements.txt RUN pip install --no-cache-dir --upgrade -r requirements.txt # 设置 Python 路径 ENV PYTHONPATH=/app/medpy/source:$PYTHONPATH # 端口与环境变量 EXPOSE 7860 ENV MCP_TRANSPORT=http ENV MCP_PORT=7860 # 启动命令 CMD ["python", "medpy/mcp_output/start_mcp.py"]