docker打包golang程序后報(bào)錯(cuò)找不到文件

首先是錯(cuò)誤代碼:

standard_init_linux.go:228: exec user process caused: no such file or directory

打包的鏡像并不復(fù)雜,采用的是alpine鏡像作為底包,將在Ubuntu下編譯好的go程序COPY進(jìn)入鏡像,然后執(zhí)行程序。

go程序使用了Gin,requests等庫

將程序打包好后使用docker run 報(bào)錯(cuò)且鏡像直接退出即使加上-it等參數(shù)依然無法進(jìn)入鏡像。



解決方法:

經(jīng)過查閱資料后得知,golang在編譯時(shí)可以選擇使用C鏈接庫(引用的C鏈接庫不打包進(jìn)程序)或者純Go編譯(打包所有用到的內(nèi)容)

而我使用的Go版本恰好又是默認(rèn)使用C鏈接庫也就是CGO方式編譯的

在容器的底包alpine鏡像中沒有g(shù)o程序依賴的C鏈接庫,所以會(huì)報(bào)錯(cuò)找不到文件。

因此,只需要將CGO模式關(guān)掉讓程序能夠脫離環(huán)境獨(dú)立運(yùn)行即可。

有教程說在go build 時(shí)加上-tags netgo即可,不過我試了下不知道為什么沒效果。

所以直接采用設(shè)置env的方式

go env -w CGO_ENABLED=0

設(shè)置好環(huán)境變量后重新編譯打包docker鏡像即可。

參考的大佬文章:

Golang build筆記standard_init_linux.go:211: exec user process caused no such file or directory

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容