首頁 >後端開發 >Golang >為什麼我的 Docker Scratch 映像在運行自訂二進位時返回「沒有這樣的檔案或目錄」?

為什麼我的 Docker Scratch 映像在運行自訂二進位時返回「沒有這樣的檔案或目錄」?

DDD
DDD原創
2024-12-15 00:21:15654瀏覽

Why Does My Docker Scratch Image Return

Docker Scratch 映像「沒有這樣的檔案或目錄」

嘗試使用暫存映像和自訂二進位檔案建立 Docker容器時,使用者可能會遇到以下錯誤:「standard_init_linux.go:207:exec使用者進程導致「沒有這樣的檔案或目錄」」。此錯誤表示在容器內無法找到或執行二進位檔案。

問題源自於在 Dockerfile 中使用「FROM scrap」指令。臨時鏡像是一個最小的鏡像,僅包含必要的工具,從而形成一個輕量級且高效的容器。但是,這也意味著容器缺少二進位檔案運行所需的某些程式庫和相依性。

要解決此問題,使用者可以選擇以下兩種方法之一:

  1. 停用CGO:CGO 允許Go 程式與C 程式碼互動,但它可能導致二進位與系統庫的動態連結。透過停用 CGO,使用者可以確保二進位檔案是靜態連結的,從而消除對特定庫的依賴。

    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
        -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
  2. 複製庫:如果CGO 對於以下操作至關重要對於二進位文件,用戶可以使用「COPY --from」指令手動將必要的庫複製到臨時映像中。這確保了二進位檔案在運行時可以存取所需的依賴項。

    COPY --from=build-image /usr/lib/libc.so.6 /usr/lib/libc.so.6

選擇的具體方法將取決於二進位檔案的要求和所需的容器隔離等級。透過解決動態連結或相依性可用性問題,使用者可以使用自訂二進位檔案成功建立和執行基於臨時映像的容器。

以上是為什麼我的 Docker Scratch 映像在運行自訂二進位時返回「沒有這樣的檔案或目錄」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn