我想构建一个 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
反正。)
是的,您经常需要添加额外的资源文件(例如证书),尤其是在使用像 alpine 这样的最小发行版时,但您可以在如此小的发行版上运行 go 应用程序这一事实通常也被视为一种优势。
要添加证书,这是一个非常好的解释,概述了如何在临时容器上执行此操作:
https://blog.codeship.com/building-minimal-docker-containers-for-go-applications/ https://blog.codeship.com/building-minimal-docker-containers-for-go-applications/
如果你宁愿坚持使用 alpine 那么你可以安装这个包来获取它们:
https://pkgs.alpinelinux.org/package/v3.7/main/x86/ca-certificates https://pkgs.alpinelinux.org/package/v3.7/main/x86/ca-certificates
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)