我想构建一个Go 1.9.2二进制文件并在Docker Alpine镜像上运行它。我编写的Go代码不调用任何C代码,同时使用了
到目前为止,我发现以下方法可以解决问题,但我不知道原因,是否最优或是否可以简化。
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
。)
env GOOS=linux GARCH=amd64 CGO_ENABLED=0 go install -v -a -installsuffix cgo
。Github上的问题 https://github.com/golang/go/issues/9344#issuecomment-69944514 也提供了解决方案。 - Dan