在linux下編譯的golang程序放到docker的busybox鏡像里無法執(zhí)行,顯示報錯信息:
exec: No such file or directory
在Docker化的今天, 我們經(jīng)常需要靜態(tài)編譯一個Go程序,以便方便放在Docker容器中。 即使你沒有引用其它的第三方包,只是在程序中使用了標準庫net
,你也會發(fā)現(xiàn)你編譯后的程序依賴glic,這時候你需要glibc-static庫,并且靜態(tài)連接。
不同的Go版本下靜態(tài)編譯方式還有點不同,在go 1.18下, 下面的方式經(jīng)測試可以做到靜態(tài)編譯:
CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' -o xxx xxx.go
另外在busybox容器里常用的調(diào)試工具也無法使用,因為他們也使用了動態(tài)鏈接庫,比如strace,需要自己編譯靜態(tài)版本的strace,以strace-6.2¢os7.6為例如下編譯:文章來源:http://www.zghlxwxcb.cn/news/detail-729442.html
./configure LDFLAGS='-static -pthread' --enable-mpers=no
然后將文件復制到docker容器中:文章來源地址http://www.zghlxwxcb.cn/news/detail-729442.html
docker cp 本地文件路徑 容器ID/容器NAME:容器內(nèi)路徑
到了這里,關(guān)于docker執(zhí)行報錯:no such file or directory: unknown的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!