file_system/Dockerfile
root e12ce5c632 Enhance logging for better troubleshooting and debugging
🔧 CI/CD Pipeline Improvements:
- Added comprehensive logging with emojis for better readability
- Detailed environment information display
- Step-by-step progress tracking with timestamps
- Enhanced Docker build progress with --progress=plain
- Container deployment validation and health checks
- Network connectivity testing and port monitoring
- Storage usage reporting and cleanup operations

🏗️ Dockerfile Enhancements:
- Added verbose logging for every build stage
- Go environment verification and dependency tracking
- Detailed compilation progress with file sizes
- Runtime environment preparation checks
- Built-in health check configuration
- Enhanced startup logging with service URLs
- Error-friendly fallback messages

📊 Debugging Features:
- Build log preservation (build.log file)
- Container state inspection and JSON formatting
- Port listening status verification
- Service availability testing with retries
- Comprehensive error reporting with context
- Container ID tracking for reference

🎯 Key Benefits:
- Easy problem identification during CI/CD
- Clear visibility into build and deployment process
- Service health monitoring and validation
- Streamlined troubleshooting workflow
- Professional logging presentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-19 10:26:34 +08:00

155 lines
5.0 KiB
Docker

# Build Stage
FROM 192.168.1.154:31010/docker/alpine:latest 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 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参数)"
# 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 && \
echo "✅ 运行时环境准备完成"
# Copy the Pre-built binary from the previous stage with logging
RUN echo "📦 ===== 复制构建产物 =====" && \
echo "🔄 从构建阶段复制二进制文件..."
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前端文件..."
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