在Alpine Docker容器中从源代码编译Go时出错:“ loadinternal:找不到运行时/ cgo”

时间:2018-12-28 21:10:20

标签: docker go alpine

我正在尝试为启用FIPS的Go版本构建Alpine Docker映像。为此,我尝试使用dev.boringcrypto存储库的golang/go分支从源代码构建Go。

运行./all.bash时,出现以下错误:

Step 4/4 : RUN cd go/src && ./all.bash
 ---> Running in 00db552598f7
Building Go cmd/dist using /usr/lib/go.
# _/go/src/cmd/dist
loadinternal: cannot find runtime/cgo
/usr/lib/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64- 
alpine-linux-musl/bin/ld: cannot find Scrt1.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64- 
alpine-linux-musl/bin/ld: cannot find crti.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lssp_nonshared
collect2: error: ld returned 1 exit status

The command '/bin/bash -c cd go/src && ./all.bash' returned a non-zero code: 2

这会导致安装测试失败,并使我退出Docker映像构建。

我在映像上安装了gcc,并尝试按照其他问题中的建议设置环境变量CGO_ENABLED=0,但这些方法似乎都不能缓解问题。

这个问题我不知所措。过去是否有人遇到类似问题?我不明白为什么会这样,因为构建在Ubuntu容器中运行良好。

谢谢!

2 个答案:

答案 0 :(得分:1)

图像上没有正确安装go或GOROOT错误

go tool dist bannergo tool dist env放入您的all.bash中寻找线索

答案 1 :(得分:0)

尽管我正在编译一个不同的项目,但我有相同的错误消息。

事实证明,阿尔卑斯山需要安装musl-dev软件包才能运行,所以我认为您需要确保Dockerfile中包含该软件包,或者通过运行apk add --no-cache musl-dev手动安装