我想构建一个Go 1.9.2二进制文件并在Docker Alpine映像上运行它。我编写的Go代码不会调用任何C代码。它还使用该net包。不幸的是,它并没有听起来那么简单,因为Go似乎并非一直都在构建静态二进制文件。当我尝试执行二进制文件时,我经常会收到有关为什么二进制文件未执行的神秘消息。互联网上有很多与此有关的信息,但是大多数最终都导致人们使用试用错误来使二进制文件有效。
net
到目前为止,我已经找到了以下作品,但是我不知道为什么,它是最优的还是可以简化的。
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仍然需要安装。)
apk
ca- certificates
是的,您经常需要添加额外的资源文件(例如证书),尤其是在使用像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