首頁 > 後端開發 > Golang > 如何從頭開始在 Go 中為 Docker 映像建置靜態二進位檔案?

如何從頭開始在 Go 中為 Docker 映像建置靜態二進位檔案?

Mary-Kate Olsen
發布: 2024-10-31 17:17:30
原創
856 人瀏覽過

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_ENABAB=00_ENABAB> :停用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板