blob: 34c7522a0ac35f51a993d436ed4ea1207ddc42cb [file] [log] [blame] [raw]
# 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"]