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

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

在 golang 中導入存檔/tar 時 docker run 失敗

在 golang 中導入存檔/tar 時 docker run 失敗

Go
喵喵時光機 2023-06-01 17:22:17
我試圖讓一個在 cmd 行上運行的 golang 程序在 docker 容器中運行,但是導入 archive/tar 會導致錯誤。這有效:    package main    import (            "fmt"    )    func main() {            fmt.Println("success!")    }產生輸出:    liam gotest $ docker run -it gotest    success!這不會:    package main    import (            "archive/tar"            "fmt"    )    var _ = tar.TypeReg    func main() {            fmt.Println("success!")    }產生輸出:    liam gotest $ docker run -it gotest    standard_init_linux.go:207: exec user process caused "no such file or directory"這是我的 Dockerfile:    FROM scratch    WORKDIR /app    COPY . /app    CMD ["./test"]我在跑:go version go1.11.4 linux/amd64Docker version 18.09.1, build 4c52b90ubuntu 18.04LTS我將不勝感激任何建議。由 vishnu narayanan 解決:我用了`CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo test.go`構建一個靜態可執行文件,它成功了。
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

為什么 ?

這是因為默認go build行為。由于動態鏈接,編譯后的二進制文件仍在系統路徑中尋找庫。

由于scratch是空的,二進制文件無法找到系統庫并拋出錯誤。

如何解決這個問題?

修改構建腳本以生成包含所有內置庫的靜態編譯構建。

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

將上述構建的輸出二進制文件用于 docker 容器。


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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