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

时间:2018-01-21 11:16:00

标签: docker go alpine

我想构建一个Go 1.9.2二进制文件并在Docker Alpine图像上运行它。我编写的Go代码不会调用任何C代码。它还使用QMainWindow包。不幸的是它并不像听起来那么简单,因为Go似乎并不是一直都在构建静态二进制文件。当我尝试执行二进制文件时,我经常会得到一些神秘的消息,说明为什么二进制文件没有执行。互联网上有很多关于此的信息,但大多数信息都是由于人们使用试验错误来使他们的二进制文件工作。

到目前为止,我已经找到了以下作品,但是我不知道为什么,如果它是最佳的,或者是否可以简化。

net

构建将在Alpine 3.7 docker镜像上运行的Go二进制文件的规范方法(如果存在)是什么?我很高兴使用env GOOS=linux GARCH=amd64 go install -v -a -tags netgo -installsuffix netgo -ldflags "-linkmode external -extldflags -static" 将程序包安装到Alpine图像,如果这样可以使事情更有效/更容易。 (相信我无论如何都需要安装apk。)

1 个答案:

答案 0 :(得分:0)

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

要添加证书,这是一个非常好的解释,概述了如何在临时容器上执行此操作:

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

如果您更愿意坚持使用alpine,那么您可以安装此软件包以获取它们:

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