這不是重復(fù)的,因?yàn)楸M管錯(cuò)誤相同,但我的用例與其他用例不同。我正在編譯一個(gè) go 應(yīng)用程序以在 docker 上部署:最新的arch linux最新的 docker 版本,golang:alpine 鏡像嘗試使用 go 版本 1.13.3 和 1.14.4 linux amd64我沒有 bash 腳本或錯(cuò)誤的文件結(jié)尾。整個(gè)項(xiàng)目都寫在這臺 Linux 機(jī)器上我可以部署一個(gè)只有 fmt 打印且沒有任何錯(cuò)誤的空 go 應(yīng)用程序然而,當(dāng)我在我的 OSX 機(jī)器上構(gòu)建它并將其發(fā)送到 linux 時(shí),我可以將該可執(zhí)行文件部署到 docker 而不會(huì)出現(xiàn)任何錯(cuò)誤OSX 莫哈韋最新的碼頭工人去 1.13.3GOOS = linux錯(cuò)誤 :standard_init_linux.go:211: exec user process caused "no such file or directory"
1 回答

慕森卡
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)你編譯你的 go 應(yīng)用時(shí)cgo
,編譯器會(huì)動(dòng)態(tài)鏈接到libstdc
.
但是,golang:alpine
圖像是如此之小,因?yàn)樗皇鞘褂?code>libstdc它的簡化版本,而是稱為musl libc
.
錯(cuò)誤消息說
standard_init_linux.go:211: exec user process caused "no such file or directory"
如果你連接到你的形象
$ docker run -it [image] /bin/sh
假設(shè)您可以找到您的可執(zhí)行文件/dist/myexec
,但是當(dāng)您嘗試運(yùn)行該可執(zhí)行文件時(shí),它會(huì)說err not found
,因?yàn)樗@然找不到您的可執(zhí)行文件,但它找不到文件libc
。
解決方案是
禁用 CGO:
CGO_ENABLED=0
在構(gòu)建時(shí)使用或添加
RUN apk add --no-cache libc6-compat
給你的
Dockerfile
或不使用
golang:alpine
要擁有一個(gè)全靜態(tài)二進(jìn)制可執(zhí)行文件,請使用以下命令構(gòu)建它:
$ CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' .
- 1 回答
- 0 關(guān)注
- 415 瀏覽
添加回答
舉報(bào)
0/150
提交
取消