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

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

如何運行使用 go binary 創建的 docker 容器?

如何運行使用 go binary 創建的 docker 容器?

Go
吃雞游戲 2023-06-19 15:22:08
我正在嘗試使用 Dockerfile 和 go file 二進制文件創建一個 docker 容器。我的文件夾中有兩個文件:Dockerfile和main,其中后者是我的簡單 go 文件的二進制文件。Dockerfile 的內容:FROM golang:1.11-alpineWORKDIR /appCOPY main /app/RUN ["chmod", "+x", "/app/main"]ENTRYPOINT ["./main"]我嘗試了以下步驟:sudo docker build -t naive5cr 。sudo docker run -d -p 8080:8080 naive5cr我通過“docker logs”看到的錯誤:standard_init_linux.go:207: exec 用戶進程導致“沒有這樣的文件或目錄”我的go文件內容[我認為這與問題無關]:func main() {    http.HandleFunc("/", index)    http.ListenAndServe(port(), nil)}func port() string {    port := os.Getenv("PORT")    if len(port) == 0 {        port = "8080"    }    return ":" + port } 二進制“main”在獨立運行時按預期運行。所以go文件的內容是沒有問題的。
查看完整描述

2 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

CGO_ENABLED=0當在 Go 中使用網絡時,您需要編譯以防止在 Linux 上鏈接到 libc。Alpine 附帶 musl 而不是 libc,并且嘗試查找 libc 會導致沒有這樣的文件或目錄錯誤。您可以通過運行ldd main查看動態鏈接來驗證這一點。

您還可以在基于 Alpine 的主機上構建以鏈接到 musl 而不是 libc。完全靜態編譯的二進制文件的優點是能夠從頭開始運行,根本不需要任何庫。


查看完整回答
反對 回復 2023-06-19
?
慕田峪9158850

TA貢獻1794條經驗 獲得超8個贊

go 編譯為本機代碼,因此請確保在 Docker 映像上構建您的 go 代碼,而不是將二進制文件復制到 docker 映像。


例如


FROM golang:1.11-alpine

WORKDIR /app

ADD . /app

RUN cd /app && go build -o goapp

ENTRYPOINT ./goapp

另外作為獎勵,這里是如何使用多階段 Docker 構建創建非常小的 Docker 鏡像:


FROM golang:1.11-alpine AS build-env

ADD . /src

RUN cd /src && go build -o goapp


FROM alpine

WORKDIR /app

COPY --from=build-env /src/goapp /app/

ENTRYPOINT ./goapp


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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