解決Docker Scratch 映像的「沒有這樣的檔案或目錄」錯誤
可能會出現令人沮喪的「沒有這樣的文件或目錄」錯誤訊息在使用Docker 臨時映像時。此錯誤通常表示二進位名稱與其實際名稱不匹配,或缺少指向基本庫的動態連結。
在 Docker 臨時映像中,二進位檔案通常是從基礎映像複製的。如提供的 Dockerfile 所示,臨時映像是透過從基礎映像複製 /etc/passwd 等基本檔案和二進位 $PROJ_BIN_PATH 來建構的。但是,要解決此錯誤,必須使用 CGO_ENABLED=0 指令停用 CGO (C Go)。
啟用 CGO 後,可以創建到 libc 或 libmusl 等庫的動態鏈接,從而在以下情況下導致錯誤臨時映像中的庫不可用。透過停用 CGO,將建立靜態編譯的二進位文件,從而無需外部庫引用。
要使用此解決方案修復錯誤,請將現有的 RUN GOOS=linux GOARCH=amd64 go build命令替換為以下內容Dockerfile:
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
這將確保您的二進位檔案是靜態編譯的並且不會依賴外部庫,從而解決「沒有這樣的庫」的問題檔案或目錄」錯誤。 -t your_go_image 。 然後 docker run -it --rm your_go_image ldd /$PROJ_NAME,您可以檢查二進位檔案的動態相依性並識別任何潛在的缺失庫。
以上是如何解決 Docker Scratch 映像中的「沒有這樣的檔案或目錄」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!