Go镜像体积大是因为未用多阶段构建直接将编译环境打包进运行镜像正确做法是用golang:slim构建、CGO_ENABLED0静态编译、alpine作基础镜像并验证DNS与证书。为什么 Go 镜像动辄 800MB而二进制才 10MB因为你没分阶段直接用 golang:latest 或 golang:alpine 构建完就当运行镜像用了——编译器、go.mod、$GOPATH、测试文件全塞进去了Docker 层也没清理。Go 编译产物是静态二进制前提是关掉 CGO根本不需要 /bin/sh、apk、git更不依赖 glibc。多阶段构建就是靠两个 FROM 指令物理隔离一个装工具链只编译一个空着身子只跑程序。FROM golang:1.22-slim AS builder —— 用 -slim 而非 latesttag 固定CI 可复现RUN CGO_ENABLED0 GOOSlinux go build -a -ldflags -s -w -o /app/main . —— -s -w 去符号表和调试信息体积直降 30%~50%别在 builder 阶段 RUN rm -rf $GOPATH那只是删文件层还在镜像大小不变scratch 还是 alpine:latest选错就 panic不是所有 Go 程序都能扔进 scratch。它真的一无所有没有 /etc/resolv.conf、没有 /dev/null、没有 /tmp连 os.UserHomeDir() 都会 panic。典型报错lookup example.com: no such host 或 exec user process caused: no such file or directory其实是找不到动态加载器。立即学习“go语言免费学习笔记深入” AI智研社 AI智研社是一个专注于人工智能领域的综合性平台