/ Dockerfile
Dockerfile
 1  # 多阶段构建Dockerfile
 2  # 第一阶段:构建Go应用
 3  FROM golang:1.23.2-alpine AS builder
 4  
 5  # 设置工作目录
 6  WORKDIR /app
 7  
 8  # 安装必要的构建工具
 9  RUN apk add --no-cache git ca-certificates tzdata
10  
11  # 复制源代码(包含go.mod和go.sum)
12  COPY . .
13  
14  # 下载依赖
15  RUN go mod download
16  
17  # 构建应用
18  RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -trimpath -buildvcs=false -o ai-infra-guard ./cmd/cli/main.go
19  
20  # 第二阶段:运行阶段(使用Python 3.12 Alpine镜像)
21  FROM python:3.12-alpine
22  
23  # 安装运行时依赖
24  RUN apk add --no-cache \
25      ca-certificates \
26      tzdata \
27      bash \
28      curl \
29      git
30  
31  # 安装uv到/usr/local/bin
32  RUN curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="/usr/local/bin" sh
33  
34  # 设置工作目录
35  WORKDIR /app
36  
37  # 从构建阶段复制二进制文件和配置文件
38  COPY --from=builder /app/ai-infra-guard .
39  COPY --from=builder /app/trpc_go.yaml .
40  COPY --from=builder /app/CHANGELOG.md .
41  
42  # 复制数据文件到容器中
43  COPY --from=builder /app/data ./data
44  
45  # 复制agent-scan目录并安装Python依赖
46  COPY ./agent-scan /app/agent-scan
47  RUN pip install --no-cache-dir -r /app/agent-scan/requirements.txt
48  
49  # 复制启动脚本到镜像中
50  COPY start.sh /app/start.sh
51  RUN chmod +x /app/start.sh && chown root:root /app/start.sh
52  
53  # 创建必要的目录并设置权限(仅对镜像内有效)
54  RUN mkdir -p /app/uploads \
55      /app/db && \
56      chown -R root:root /app && \
57      chmod -R 755 /app && \
58      mkdir -p /app/AIG-PromptSecurity/utils
59  COPY ./AIG-PromptSecurity/utils/strategy_map.json /app/AIG-PromptSecurity/utils/strategy_map.json
60  
61  # 设置环境变量
62  ENV APP_ENV=production
63  ENV UPLOAD_DIR=/app/uploads
64  ENV DB_PATH=/app/db/tasks.db
65  ENV TZ=Asia/Shanghai
66  ENV PYTHONUNBUFFERED=1
67  
68  # 暴露端口
69  EXPOSE 8088
70  
71  # 声明卷挂载点
72  VOLUME ["/app/uploads", "/app/db", "/app/data", "/app/logs"]
73  
74  # 健康检查
75  HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
76      CMD pgrep ai-infra-guard || exit 1
77  
78  # 启动命令
79  CMD ["/app/start.sh"]