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

Docker容器执行添加的二进制文件提示“无此文件或目录”问题求助

问题:预编译Go二进制文件在Alpine容器中无法执行

之前在Docker容器内编译Go代码,为了缩短构建时间,改为将预编译好的二进制文件复制到golang:1.20-alpine镜像中,但运行容器时提示:

exec /go/src/golang-baseapp/webserver: no such file or directory

尽管构建时已通过ls确认文件存在,且设置了可执行权限。

示例代码

Go服务器源码:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
        fmt.Fprintf(w, "Hello World!!!")
    })
    log.Fatal(http.ListenAndServe(":8080", nil))
}

本地编译命令:

go build -o webserver *.go

使用的Dockerfile:

FROM golang:1.20-alpine

RUN go version

WORKDIR /go/src/golang-baseapp

ADD ./webserver         /go/src/golang-baseapp/
RUN ls -a               /go/src/golang-baseapp/

RUN chmod +x /go/src/golang-baseapp/webserver
RUN stat /go/src/golang-baseapp/webserver

EXPOSE 8080

CMD ["/go/src/golang-baseapp/webserver"]

构建与运行命令:

docker build --no-cache --progress=plain -t sample-image .
docker run sample-image

解决建议

  • 适配Alpine的musl libc编译二进制
    Alpine默认使用musl libc,而本地编译的Go二进制通常依赖glibc,导致依赖缺失。需编译静态链接的二进制:

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o webserver -ldflags '-w -s' *.go
    

    参数说明:

    • CGO_ENABLED=0:禁用CGO,生成完全静态链接的二进制,不依赖系统libc
    • GOOS=linux:指定目标操作系统为Linux
    • GOARCH=amd64:指定目标架构(根据容器运行的架构调整,如ARM64则改为arm64)
    • -ldflags '-w -s':去除调试信息,减小二进制体积
  • 检查二进制架构匹配
    如果本地机器架构(如ARM64的Mac)与容器运行架构(如amd64)不一致,会导致二进制无法执行。需指定对应架构编译,或使用docker buildx进行跨架构构建。

  • 优化镜像选择
    无需使用带有Go编译环境的golang:1.20-alpine,改用更轻量的基础镜像:

    1. 使用alpine:latest:
      FROM alpine:latest
      WORKDIR /app
      COPY ./webserver /app/
      RUN chmod +x /app/webserver
      EXPOSE 8080
      CMD ["/app/webserver"]
      
    2. 使用scratch镜像(完全空镜像,仅适用于静态编译的二进制):
      FROM scratch
      WORKDIR /app
      COPY ./webserver /app/
      EXPOSE 8080
      CMD ["/app/webserver"]
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:31