dga / Dockerfile
moxiaoying's picture
Update Dockerfile
b865c24 verified
# --- Stage 1: Build Go Application ---
FROM golang:1.21-alpine AS build
# Alpine 需要这些依赖来编译
RUN apk add --no-cache build-base
WORKDIR /app
# 复制 Go 源代码
COPY *.go ./
# 编译 Go 应用
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /main main.go
# --- Stage 2: Final Runtime Image ---
FROM alpine:latest
RUN apk add --no-cache python3 py3-pip curl tar gzip bash jq ca-certificates
RUN adduser -D -u 1000 user
RUN mkdir -p /home/user/data && chown -R user:user /home/user/data
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME/app
ENV VIRTUAL_ENV=$HOME/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# 安装系统依赖
# 安装 Python 依赖 (!!! 确认你的脚本用的是 webdav3 !!!)
# 如果你用了我上次给的脚本,应该是 webdav3
RUN pip install --no-cache-dir requests webdavclient3
# 如果你确定用的是 webdavclient3,那就改成 webdavclient3,但要确保脚本也对应修改
# 从构建阶段复制编译好的 Go 应用
COPY --from=build /main $HOME/app/main
# 复制后台同步脚本和入口点脚本
COPY --chown=user sync_data.sh $HOME/app/sync_data.sh
COPY --chown=user entrypoint.sh $HOME/app/entrypoint.sh
# 创建用于存储文件的目录
RUN mkdir $HOME/app/files
# 赋予脚本执行权限 (Go 应用也需要)
RUN chmod +x $HOME/app/main $HOME/app/sync_data.sh $HOME/app/entrypoint.sh
RUN chown -R user:user /home/user
# 切换到非 root 用户
USER user
# 端口暴露 (Hugging Face 会处理)
EXPOSE 3456
# 设置入口点脚本
ENTRYPOINT ["/home/user/app/entrypoint.sh"]
# CMD ["/app/main"] # 如果 entrypoint.sh 负责启动 sync_data.sh,可以让 CMD 启动 Go 应用
# 或者 entrypoint.sh 负责启动所有进程