Windows下Go Web应用Docker部署遇exec format error错误求助
解决Docker部署Go Web应用时的
exec /app/main: exec format error问题 问题根源
你在Windows环境下直接执行go build生成的是Windows平台的可执行文件(PE格式),但Docker容器基于Linux镜像,只能运行Linux平台的ELF格式二进制文件,因此出现格式不兼容错误。
解决方法
方法1:利用现有Makefile完成跨平台编译
你的Makefile已经配置了Linux平台的编译参数,直接用它编译即可:
- 删除之前生成的Windows版本可执行文件(Windows下直接删除
bin/main文件) - 执行编译命令:
make build - 重新构建并运行容器:
docker build -t tiny . docker run -p 127.0.0.1:8080:8080 tiny
方法2:手动指定环境变量编译
如果不想用Makefile,在Windows终端中手动设置跨平台编译参数:
SET GOOS=linux SET GOARCH=amd64 go build -o bin/main main.go
完成后再执行docker build和docker run命令。
方法3:使用Docker多阶段构建(推荐)
修改Dockerfile为多阶段构建,直接在容器内完成编译,彻底避免本地环境差异问题:
# 第一阶段:编译Go程序 FROM golang:latest AS builder WORKDIR /app COPY . . # 禁用CGO并指定Linux平台编译 RUN CGO_ENABLED=0 GOOS=linux go build -o main main.go # 第二阶段:生成轻量运行镜像 FROM alpine:latest WORKDIR /app COPY --from=builder /app/main . EXPOSE 8080 CMD ["./main"]
执行以下命令完成部署:
docker build -t tiny . docker run -p 127.0.0.1:8080:8080 tiny
内容的提问来源于stack exchange,提问作者user19880359
相关产品推荐
相关产品推荐

