diff --git a/Dockerfile b/Dockerfile index 9558ad8..07c0745 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,154 +1,37 @@ -# Build Stage -FROM 192.168.1.154:31010/docker/alpine:latest AS builder +# Build Stage - 使用预装 Go 的基础镜像 +FROM 192.168.1.154:31010/docker/golang:1.24-alpine AS builder WORKDIR /app -# Install Go with verbose logging -RUN echo "🔧 ===== 安装Go环境 =====" && \ - echo "📦 更新Alpine包索引..." && \ - apk update && \ - echo "📦 安装Go语言环境..." && \ - apk add --no-cache go && \ - echo "✅ Go安装完成" && \ - go version && \ - echo "📋 Go环境信息:" && \ - which go && \ - go env GOOS GOARCH GOVERSION - -# Configure Go proxy for faster downloads ENV GOPROXY=https://goproxy.cn,direct ENV GOSUMDB=sum.golang.google.cn -RUN echo "🔧 ===== 配置Go代理 =====" && \ - echo "📡 Go代理配置:" && \ - go env GOPROXY && \ - go env GOSUMDB - -# Copy go mod and sum files with logging -RUN echo "🔧 ===== 复制依赖文件 =====" && \ - echo "📄 复制go.mod和go.sum..." - +# 复制依赖文件 COPY go.mod go.sum ./ +RUN go mod download -RUN echo "📋 依赖文件内容:" && \ - echo "--- go.mod ---" && \ - head -20 go.mod && \ - echo "--- go.sum ---" && \ - wc -l go.sum && \ - echo "📦 总依赖数: $(cat go.sum | wc -l)" - -# Download all dependencies with verbose logging -RUN echo "🔧 ===== 下载Go依赖 =====" && \ - echo "⬇️ 开始下载依赖包..." && \ - go mod download -x && \ - echo "✅ 依赖下载完成" && \ - go mod verify && \ - echo "✅ 依赖验证完成" && \ - echo "📋 下载的模块:" && \ - go mod why -m all - -# Copy the source code with logging -RUN echo "🔧 ===== 复制源代码 =====" && \ - echo "📁 项目结构:" && \ - find . -type f -name "*.go" | head -10 - +# 复制源代码 COPY . . -RUN echo "📋 复制完成后的目录结构:" && \ - ls -la && \ - echo "📊 源代码统计:" && \ - find . -name "*.go" | wc -l && \ - echo " Go文件数量: $(find . -name "*.go" | wc -l)" - -# Build the Go app with detailed logging -RUN echo "🔧 ===== 编译Go应用 =====" && \ - echo "🏗️ 开始编译..." && \ - echo "📋 编译信息:" && \ - echo " - 工作目录: $(pwd)" && \ - echo " - Go版本: $(go version)" && \ - echo " - 目标: ./cmd/server" && \ - echo "🏗️ 执行编译命令..." && \ - go build -v -o server ./cmd/server && \ - echo "✅ 编译完成" && \ - echo "📋 编译产物信息:" && \ - ls -la server && \ - file server && \ - echo "📏 二进制大小: $(ls -lh server | awk '{print $5}')" && \ - echo "🔍 可执行文件测试:" && \ - ./server --version 2>/dev/null || echo " (应用不支持--version参数)" +# 编译 Go 应用 +RUN go build -v -o server ./cmd/server # Run Stage FROM 192.168.1.154:31010/docker/alpine:latest WORKDIR /app -RUN echo "🔧 ===== 运行时环境准备 =====" && \ - echo "📋 运行时环境信息:" && \ - echo " - 工作目录: $(pwd)" && \ - echo " - 用户: $(whoami)" && \ - echo " - 系统信息: $(uname -a)" && \ - echo "📋 安装运行时工具..." && \ - apk add --no-cache wget file && \ - echo "✅ 运行时环境准备完成" - -# Copy the Pre-built binary from the previous stage with logging -RUN echo "📦 ===== 复制构建产物 =====" && \ - echo "🔄 从构建阶段复制二进制文件..." +RUN apk add --no-cache wget file COPY --from=builder /app/server . - -RUN echo "✅ 二进制文件复制完成" && \ - ls -la server && \ - file server && \ - echo "🔍 测试二进制文件..." && \ - chmod +x server - -# Copy web resources with logging -RUN echo "📦 ===== 复制Web资源 =====" && \ - echo "🌐 复制web前端文件..." +RUN chmod +x server COPY --from=builder /app/web ./web - -RUN echo "✅ Web资源复制完成" && \ - echo "📁 Web目录结构:" && \ - (test -d web && (find web -type f | head -10) || echo " Web目录不存在") - -# Copy docs with logging -RUN echo "📦 ===== 复制文档文件 =====" && \ - echo "📚 复制API文档..." - COPY --from=builder /app/docs ./docs -RUN echo "✅ 文档复制完成" && \ - echo "📁 文档目录结构:" && \ - (test -d docs && (find docs -type f | head -5) || echo " 文档目录不存在") - -RUN echo "📋 最终运行环境文件列表:" && \ - ls -la && \ - echo "📊 目录大小统计:" && \ - du -sh * 2>/dev/null || echo " 无法获取大小信息" - -# Expose port 8080 to the outside world EXPOSE 8080 -# Add health check -RUN echo "🏥 ===== 配置健康检查 =====" && \ - echo "📋 健康检查配置:" && \ - echo " - 端口: 8080" && \ - echo " - 路径: /swagger/index.html" - HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/swagger/index.html || exit 1 -# Command to run the executable with startup logging -CMD echo "🚀 ===== 启动文件系统服务 =====" && \ - echo "📋 启动信息:" && \ - echo " - 工作目录: $(pwd)" && \ - echo " - 可执行文件: $(ls -la server)" && \ - echo " - 端口: 8080" && \ - echo " - 启动时间: $(date)" && \ - echo "🌐 服务即将启动..." && \ - echo "📖 API文档地址: http://localhost:8080/swagger/index.html" && \ - echo "📱 Web界面地址: http://localhost:8080/web" && \ - echo "🚀 ===== 开始运行服务 =====" && \ - ./server +CMD ["./server"]