亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從頭開始構建小圖像(打開:沒有這樣的文件或目錄)

從頭開始構建小圖像(打開:沒有這樣的文件或目錄)

Go
慕勒3428872 2022-06-13 15:59:45
我嘗試使用從頭開始構建一個小圖像。我關閉了 CGO,但程序運行時仍然無法讀取文件。我收到錯誤消息:“打開 ./app/a.txt:沒有這樣的文件或目錄”。程序無法讀取文件還有其他原因嗎?FROM golang:alpine AS builderRUN apk update && apk add --no-cache gitWORKDIR $GOPATH/src/scratchADD . .RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o /go/bin/scratchFROM scratch# Copy static executable.COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/COPY --from=builder /go/bin/scratch /go/bin/scratch# Run the binary.ENTRYPOINT ["/go/bin/scratch"]func main() {    resp, err := http.Get("https://google.com")    check(err)    body, err := ioutil.ReadAll(resp.Body)    check(err)    fmt.Println(len(body))    LocalFile := "./app/a.txt"    fmt.Println(LocalFile)    dat, err := ioutil.ReadFile(LocalFile)    check(err)    fmt.Print(string(dat))    f, err := os.Open(LocalFile)    check(err)    b1 := make([]byte, 5)    n1, err := f.Read(b1)    check(err)    fmt.Printf("%d bytes: %s\n", n1, string(b1[:n1]))}func check(err error) {    if err != nil {        fmt.Println(err)        os.Exit(1)    }}
查看完整描述

2 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

alpine不提供glibc。alpine之所以這么小,是因為它使用了一個名為musl.libc.org的精簡版 libstdc 。


因此,我們將使用ldd命令檢查靜態鏈接的依賴項。


$ docker run -it <image name> /bin/sh

$ cd /go/bin

$ ldd scratch   # or the excutable you are calling-> ldd <executable>

檢查鏈接的靜態文件,它們是否存在于該版本的 alpine 上?如果不從二進制文件的角度來看,它沒有找到文件——并且會報告File not found.

以下步驟取決于缺少哪些二進制文件,您可以在互聯網上查找如何安裝它們。

添加RUN apk add --no-cache libc6-compat到您的 Dockerfile 以添加libstdc一些Golang基于 alpine 圖像的 Dockerfile。

在您的情況下,解決方案是

  • 禁用 CGO:CGO_ENABLED=0在構建時使用

  • 或添加  RUN apk add --no-cache libc6-compat 到您的Dockerfile

  • 或不使用golang:alpine


查看完整回答
反對 回復 2022-06-13
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

我錯誤地用程序要讀取的 txt 文件編譯 go 程序。這就是為什么程序編譯為二進制 exec 后文件路徑不正確的原因。以防萬一有人像我一樣犯了同樣的錯誤,這是我的解決方案之一。我通過將文本文件移出我的項目并使用 env 變量指向我想要的路徑來解決問題。

查看完整回答
反對 回復 2022-06-13
  • 2 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號