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

Go应用Docker化部署AWS Lambda遇exec /main文件未找到错误

Go应用Docker化部署AWS Lambda遇到执行文件找不到问题

问题背景

我有一个Go语言应用,计划将其Docker化后部署到AWS Lambda,应用使用bimg库处理图片压缩,因此依赖libvips组件。

我的Dockerfile

FROM golang:1.21 as build
WORKDIR /app
RUN apt-get update
RUN apt-get install -y libvips libvips-dev
COPY go.mod go.sum ./
COPY main.go .
RUN GOOS=linux GOARCH=amd64 go build -o main main.go

FROM alpine:3.19
COPY --from=build /app/main /main
ENTRYPOINT [ "/main" ]

精简版Go代码

package main

import (
    "context"
    "log"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/h2non/bimg"
)

var (
    s3Client *s3.Client
)

func init() {
    cfg, err := config.LoadDefaultConfig(context.Background())
    if err != nil {
        log.Fatalf("failed to load AWS config: %v", err)
    }

    s3Client = s3.NewFromConfig(cfg)
}

func main() {
    lambda.Start(Handler)
}

func Handler(ctx context.Context, event events.S3Event) error {
    // 压缩、上传等业务逻辑
    return nil
}

遇到的错误

在AWS控制台测试Lambda时,出现exec /main: no such file or directory错误;本地执行docker run --rm -it s3-image-compressor-lambda:latest运行镜像时,同样报该错误。我清楚Lambda无法在本地正常运行,但预期应该出现运行时错误,而非文件找不到的提示。

调试过程及结果

为排查问题,我在Dockerfile中添加了调试命令:

  • 在复制main文件后添加RUN ls -l /,输出显示根目录下确实存在main文件:
#16 [stage-1 4/7] RUN ls -l /
#16 0.354 total 18668
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 bin
#16 0.354 drwxr-xr-x    5 root     root           340 Apr  4 22:28 dev
#16 0.354 drwxr-xr-x    1 root     root          4096 Apr  4 22:28 etc
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 home
#16 0.354 drwxr-xr-x    7 root     root          4096 Jan 26 17:53 lib
#16 0.354 -rwxr-xr-x    1 root     root      19055376 Apr  4 22:06 main
#16 0.354 drwxr-xr-x    5 root     root          4096 Jan 26 17:53 media
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 mnt
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 opt
#16 0.354 dr-xr-xr-x  459 root     root             0 Apr  4 22:28 proc
#16 0.354 drwx------    2 root     root          4096 Jan 26 17:53 root
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 run
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 sbin
#16 0.354 drwxr-xr-x    2 root     root          4096 Jan 26 17:53 srv
#16 0.354 dr-xr-xr-x   13 root     root             0 Apr  4 22:28 sys
#16 0.354 drwxrwxrwt    2 root     root          4096 Jan 26 17:53 tmp
#16 0.354 drwxr-xr-x    7 root     root          4096 Jan 26 17:53 usr
#16 0.354 drwxr-xr-x   12 root     root          4096 Jan 26 17:53 var
#16 DONE 0.4s
  • 接着添加RUN /main测试执行,输出为:
> [stage-1 8/8] RUN /main:
0.258 /bin/sh: /main: not found

内容的提问来源于stack exchange,提问作者Ahmet Yazıcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:28:13