首页  >  文章  >  后端开发  >  如何从头开始在 Go 中为 Docker 镜像构建静态二进制文件?

如何从头开始在 Go 中为 Docker 镜像构建静态二进制文件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 17:17:30758浏览

How to Build Static Binaries in Go for Docker Images from Scratch?

在 Go 中创建静态二进制文件的标志

从头开始构建 docker 镜像时,需要静态二进制文件来防止执行过程中出现错误。但是,命令 RUN go build -o /go/bin/myapp 可能会生成因“没有此类文件或目录”错误而失败的二进制文件。

要克服此问题,需要以下标志:

RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .

说明:

  • CGO_ENABLED=0:禁用 CGO(Call Go from C),该功能允许 Go 程序调用C代码。这是必要的,因为 Linux 动态链接 C 库,这可能会在构建静态二进制文件时导致问题。
  • -a:强制重建所有包和依赖项,无论它们是否最新-date.
  • -ldflags '-extldflags "-static"':指定要传递给外部链接器的标志。在这种情况下,-static 表示应使用静态链接,确保所有必需的库都嵌入到二进制文件中。

同时使用 CGO_ENABLED=0 和 -ldflags '-extldflags " 非常重要-static"' 因为:

  • CGO_ENABLED=0 禁用 CGO 但不保证静态链接。
  • -ldflags '-extldflags "-static"' 强制静态链接但不禁用CGO。

通过使用这两个标志,您可以确保生成的二进制文件是静态的并且不依赖于任何外部库。

以上是如何从头开始在 Go 中为 Docker 镜像构建静态二进制文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn