编译的命令如下:
1 | docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) -e GOPROXY=https://goproxy.cn golang:1.14.4-alpine3.12 go build main.go |
执行:
1 | no such file or directory: ./main |
这个时候就很懵了,因为这个main
文件是有可执行权限的。所以,这个file
一定就不是指main
文件了。分析后,猜测是它依赖的动态链接库不存在:
1 | ldd main |
果然,发现musl
库不存在。alpine
默认用的是musl
库,并且,go
编译的时候,默认会开启CGO
,这个时候就会用到libc
之类的库。所以,这里我们可以暂时关闭CGO
,让编译通过:
1 | docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) -e CGO_ENABLED=0 -e GOPROXY=https://goproxy.cn golang:1.14.4-alpine3.12 go build main.go |
当然,我们最好还是用和本机系统一样的docker
环境来进行编译,这样,就可以正确的链接C
库了。