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

Docker执行报错:exec /app/serverTest: no such file or directory求助

问题原因分析

1. 动态链接库不兼容(最常见)

你用golang:1.20(基于Debian,依赖glibc)编译二进制文件,但部署阶段使用golang:alpine(依赖musl libc)。默认编译的Go程序会绑定系统的glibc,而alpine系统没有这个库,导致系统找不到执行所需的依赖,最终触发“no such file or directory”错误(本质是依赖缺失,而非程序文件本身不存在)。

2. 未启用静态编译参数

如果代码中用到CGO,或默认编译逻辑生成了动态链接二进制,都会导致在alpine环境下无法运行。需要在编译阶段明确指定参数,生成不依赖系统库的静态二进制:

RUN CGO_ENABLED=0 GOOS=linux go build -o ./out/serverTest .

3. 二进制文件复制路径异常(可能性较低)

可通过以下命令验证镜像内文件是否存在:

# 进入镜像shell
docker run -it --entrypoint /bin/sh <你的镜像名称>
# 检查目标路径
ls -l /app/serverTest

若文件不存在,说明COPY路径配置错误;若文件存在,可排除路径问题。

4. 架构不匹配

如果在非x86_64架构(如ARM/M1芯片)上编译,而部署镜像为x86_64版本的alpine,会因架构不兼容导致无法执行,也会触发类似错误。需指定对应架构参数编译:

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./out/serverTest .
修复方案

修改编译阶段的go build命令,添加静态编译参数,同时简化部署镜像(无需保留Go环境):

## Build
FROM golang:1.20 AS build

WORKDIR /tmp/build

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

# 生成静态编译的二进制文件
RUN CGO_ENABLED=0 GOOS=linux go build -o ./out/serverTest .

## Deploy
FROM alpine:latest

COPY --from=build /tmp/build/out/serverTest /app/serverTest

EXPOSE 8080

ENTRYPOINT ["/app/serverTest"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:50:04