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

Ish*_*rat 3 go docker alpine-linux

我正在尝试为启用 FIPS 的 Go 版本构建 Alpine Docker 映像。为此,我尝试使用存储库dev.boringcrypto的分支从源代码构建 Go golang/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
Run Code Online (Sandbox Code Playgroud)

这会导致安装测试失败并将我踢出 Docker 映像构建。

我已gcc在图像上安装了该软件,并尝试CGO_ENABLED=0按照其他问题中的建议设置环境变量,但这些事情似乎都无法缓解问题。

我对这个问题束手无策。过去有其他人遇到过类似的问题吗?我不明白为什么会发生这种情况,因为构建在 Ubuntu 容器中运行良好。

谢谢!

Lau*_*ens 7

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

事实证明,alpine 需要musl-dev安装该软件包才能正常工作,所以我认为您需要确保它包含在您的 Dockerfile 中,或者通过运行 手动安装它apk add --no-cache musl-dev