# 选用精简版 Python 3.10 镜像 FROM python:3.10-slim # ========================================== # 新增操作:一键替换 Debian 原生镜像源为阿里云,解决 apt-get 卡死问题 # 注意:新版 Debian 使用 debian.sources,老版使用 sources.list,这里做了兼容处理 # ========================================== RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list /etc/apt/sources.list.d/debian.sources 2>/dev/null || true && \ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list /etc/apt/sources.list.d/debian.sources 2>/dev/null || true # 设置环境变量,防止弹窗 ENV DEBIAN_FRONTEND=noninteractive \ TZ=Asia/Shanghai \ PYTHONUNBUFFERED=1 WORKDIR /app # 生成一个固定的 32 位伪随机字符串作为机器码,你可以随便改,但确定后就不要变了 ARG FIXED_MACHINE_ID="b69c62e25df547a18a23fb854f4cdd48" USER root # 写入固定的 machine-id RUN echo "${FIXED_MACHINE_ID}" > /etc/machine-id && \ mkdir -p /var/lib/dbus && \ cp /etc/machine-id /var/lib/dbus/machine-id # ========================================== # 关键修复:在系统内正式创建 UID 1000 的账户 # 这样 screen 的 getpwuid() 就能成功识别身份了 # ========================================== RUN useradd -m -u 1000 hfuser # 安装基础环境和 sudo (供 install.sh 内部调用) RUN apt-get update -y && \ apt-get install -y --no-install-recommends sudo wget curl ca-certificates && \ rm -rf /var/lib/apt/lists/* # 将仓库所有文件拷入(包括你刚刚上传的 QQ_3.2.31_260710_amd64_01.deb) COPY . /app/ # ========================================== # 关键操作:把你上传的安装包重命名为 QQ.deb # 官方 install.sh 检测到该文件后,会直接跳过网络下载! # ========================================== RUN mv /app/QQ_3.2.31_260710_amd64_01.deb /app/QQ.deb || echo "未找到对应deb包,将走默认下载逻辑" # 赋予官方脚本执行权限并以 root 身份运行它 (此时在 docker 构建期间,默认是 root) RUN chmod +x /app/install.sh && \ cd /app && ./install.sh # ========================================== # 修改操作:为 pip install 加上了阿里云源加速 (-i https://mirrors.aliyun.com/pypi/simple/) # ========================================== RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ flask requests gradio_client fastapi uvicorn python-multipart websockets # 将 /app 目录的所有权移交给 UID 1000,防止运行权限报错 RUN chown -R 1000:1000 /app # 切换到刚刚注册的 1000 号用户身份 (HuggingFace 强制安全要求) USER 1000 # 赋予我们的业务启动脚本执行权限 RUN chmod +x /app/start.sh # 暴露接口:7860 是 Web Shell,7667 和 7668 是机器人的 API/Webhook EXPOSE 7860 7667 7668 # 启动容器 CMD ["/app/start.sh"]