QQBot / Dockerfile
ffzeroHua's picture
Update Dockerfile
40c0e3b verified
Raw
History Blame Contribute Delete
2.92 kB
# 选用精简版 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"]