| # Claude Agent Telegram Bot Dockerfile |
| # 支持多实例部署的统一镜像 |
| |
| FROM python:3.12-slim |
| |
| # 设置工作目录 |
| WORKDIR /app |
| |
| # 安装系统依赖 |
| RUN apt-get update && apt-get install -y \ |
| build-essential \ |
| git \ |
| && rm -rf /var/lib/apt/lists/* |
| |
| # 创建非root用户 (Claude SDK 安全要求) |
| RUN useradd -m -u 1000 -s /bin/bash claude && \ |
| mkdir -p /app /home/claude/.claude/sessions && \ |
| chown -R claude:claude /app /home/claude |
| |
| # 先复制启动脚本(作为root用户) |
| COPY scripts/docker-entrypoint.sh /app/scripts/ |
| RUN chmod +x /app/scripts/docker-entrypoint.sh |
| |
| # 切换到非root用户来复制代码和安装依赖 |
| USER claude |
| |
| # 复制项目文件 |
| COPY --chown=claude:claude requirements.txt . |
| COPY --chown=claude:claude src/ src/ |
| COPY --chown=claude:claude scripts/ scripts/ |
| COPY --chown=claude:claude configs/ configs/ |
| |
| # 安装Python依赖 |
| RUN pip install --no-cache-dir --user -r requirements.txt |
| |
| # 添加用户 pip bin 到 PATH |
| ENV PATH="/home/claude/.local/bin:${PATH}" |
| |
| # 创建必要的目录 |
| RUN mkdir -p \ |
| /app/data/storage \ |
| /app/temp/telegram \ |
| /app/logs |
| |
| # 设置环境变量 |
| ENV PYTHONUNBUFFERED=1 |
| ENV PYTHONPATH=/app/src |
| |
| # 暴露Webhook回调端口范围 (每个bot使用不同端口) |
| EXPOSE 30541-30544 |
| |
| # 健康检查 |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ |
| CMD ps aux | grep -v grep | grep -q python || exit 1 |
| |
| # 切换回root用户来运行entrypoint(需要权限修复volume) |
| USER root |
| |
| # 使用启动脚本作为entrypoint(会在内部切换到claude用户) |
| ENTRYPOINT ["/app/scripts/docker-entrypoint.sh"] |
| |
| # 启动命令(通过docker-compose覆盖) |
| CMD ["python", "scripts/start_telegram_bot.py"] |