最近有一个用户反馈, 他使用 golang:1.13.1-alpine3.10 这个镜像来编译的可执行程序无法在云函数的环境运行, 报错信息如下:
fork/exec /var/user/main: no...such file or directory
在 macOS 下编译则没有这个问题
问题定位
还未来得及定位问题, 用户便反馈说换了一个镜像就没问题了, 于是没能获得更多信息
过了几天, 有一个同事在群里贴出了...Go 程序链接出错的信息, 看起来也是在 Alpine Linux 下编译的, 有人回复道 Alpine Linux 使用的不是 glibc
啊哈, 终于有线索了, 写代码验证一下
package main..., 看看结果有什么不同
$ docker run -v $PWD:/go/src/test -w /go/src/test golang:1.13.1-alpine3.10 go build -o main-alpine...因而使用 golang:1.13.1-alpine3.10 这个镜像编译出来的程序如果依赖于 musl libc, 则会在程序加载的时候找不到所需的动态库
解决问题的方法很简单, 只需将镜像换成 golang