一尘不染

如何为Docker Alpine映像构建静态Go二进制文件?

go

我想构建一个Go 1.9.2二进制文件并在Docker
Alpine映像上运行它。我编写的Go代码不会调用任何C代码。它还使用该net包。不幸的是,它并没有听起来那么简单,因为Go似乎并非一直都在构建静态二进制文件。当我尝试执行二进制文件时,我经常会收到有关为什么二进制文件未执行的神秘消息。互联网上有很多与此有关的信息,但是大多数最终都导致人们使用试用错误来使二进制文件有效。

到目前为止,我已经找到了以下作品,但是我不知道为什么,它是最优的还是可以简化的。

env GOOS=linux GARCH=amd64 go install -v -a -tags netgo -installsuffix netgo -ldflags "-linkmode external -extldflags -static"

构造将在Alpine 3.7
docker映像上运行的Go二进制文件的规范方法(如果存在)是什么?我很乐意用来apk将软件包安装到Alpine映像中,如果这样做会使事情更高效/更容易。(相信我ca- certificates仍然需要安装。)


阅读 327

收藏
2020-07-02

共1个答案

一尘不染

是的,您经常需要添加额外的资源文件(例如证书),尤其是在使用像alpine这样的最小发行版时,但是在这样小的发行版上可以运行go应用程序这一事实通常也被视为一个优势。

要添加证书,这是一个很好的说明,概述了如何在临时容器上进行操作:

https://blog.codeship.com/building-minimal-docker-containers-for-go-
applications/

如果您想坚持使用Alpine,则可以安装此软件包以获取它们:

https://pkgs.alpinelinux.org/package/v3.7/main/x86/ca-
certificates

2020-07-02