Windows下Docker部署Golang应用遇exec格式错误求助
解决Docker运行Golang应用时的
exec format error问题 针对你遇到的exec /app/server: exec format error报错,即使指定了--platform=linux/amd64仍未解决,可尝试以下排查和修复步骤:
确认构建命令的平台参数正确
执行构建时务必完整传递平台参数,同时清理旧缓存避免干扰:docker build --platform linux/amd64 --no-cache -t your-app-name .验证二进制文件的架构
构建完成后,运行以下命令检查产物是否为amd64架构:docker run --rm --platform linux/amd64 alpine:latest file /app/server正常输出应包含
ELF 64-bit LSB executable, x86-64,若显示其他架构(如aarch64),说明Go构建的环境变量未生效。调整Dockerfile中Go构建的环境变量设置
Windows的CMD/PowerShell不支持CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build这种连续环境变量写法,建议在builder阶段提前设置环境变量:FROM --platform=linux/amd64 golang:1.21-bookworm as builder WORKDIR /app COPY ./src/. ./ RUN go mod download # 提前设置Go构建环境变量 ENV CGO_ENABLED=0 ENV GOARCH=amd64 ENV GOOS=linux RUN go build -v -o server ./cmd/main.go FROM --platform=linux/amd64 debian:bookworm-slim RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ ca-certificates && \ rm -rf /var/lib/apt/lists/* COPY --from=builder /app/server /app/server RUN chmod +x /app/server CMD ["/app/server"]检查WSL后端架构(Windows 11)
若使用WSL 2作为Docker后端,确保默认WSL分发版为x86_64架构:- 在PowerShell中执行
wsl -l -v查看分发版列表 - 若存在arm64架构的实例,切换到amd64的分发版并设置为默认:
wsl --set-default Ubuntu-22.04
- 在PowerShell中执行
内容的提问来源于stack exchange,提问作者Stefan923
相关产品推荐
相关产品推荐

