You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Ubuntu镜像多阶段构建Go应用Docker部署报错及解决

问题场景

在testdocker目录下执行docker compose up命令,尝试通过多阶段构建(基于Go镜像编译,最终使用Ubuntu镜像运行)部署Go应用时出现运行报错。

目录结构:

  • /testdocker
    • main.go
    • go.mod
    • Dockerfile
    • docker-compose.yml

原Dockerfile配置:

# golang base image
FROM golang:1.19-alpine as golangBase
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go mod tidy && go build -o handlerBuild main.go

FROM ubuntu:latest
RUN mkdir /app
WORKDIR /app
COPY --from=golangBase /app .
ENTRYPOINT [ "/app/handlerBuild" ]
问题原因

Alpine Linux默认使用musl libc,而Ubuntu使用glibc。Go默认开启CGO时,编译出的二进制文件会依赖构建环境的系统libc,导致在Ubuntu镜像中运行时出现libc依赖不兼容的错误。

解决方案

在Go构建命令中添加CGO_ENABLED=0参数,强制构建完全静态的二进制文件,不依赖系统libc。

修正后的Dockerfile:

# golang base image
FROM golang:1.19-alpine as golangBase
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go mod tidy && CGO_ENABLED=0 go build -o handlerBuild main.go

FROM ubuntu:latest
RUN mkdir /app
WORKDIR /app
COPY --from=golangBase /app/handlerBuild .
ENTRYPOINT [ "/app/handlerBuild" ]

(注:可优化COPY步骤,仅复制编译好的二进制文件,进一步减少镜像体积)

内容的提问来源于stack exchange,提问作者patabhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:35:20