当前位置: 首页 > docker, 虚拟化 > 正文

docker 容器上编译 go 程序无法运行,提示找不到文件

在kubernetes1.9上测试deploy的rolling-update,使用的测试用例是go写的一个简单webserver,本地编译没问题,且可以执行,但是再kubectl上跑起来提示文件找不到,网上搜了半天,起原因就是go的编译方式问题,因为运行在 alpine3.6 上面,涉及到了动态编译和静态编译的问题,网上的很多方法并不适用,最后测试了好久终于给搞定了。

初始编译语句如下:

发现docker运行失败:

先看看错误日志提示:
主要看这一行:panic: standard_init_linux.go:178: exec user process caused “no such file or directory”

根据网上的类似问题,尝试了如下两种都没有成功:
(1)编译时禁止cgo,CGO_ENABLED=0
(2)使用–ldflags “-extldflags -static” 来让gcc使用静态编译

最后找到在alpine3.6上应该使用网络编译go,即增加 -tags netgo。
编译改成

再次运行 make all
发现这次docker运行成功。

编译后的文件:

运行的pod如下:

本文固定链接: https://www.sudops.com/docker-%e5%ae%b9%e5%99%a8%e4%b8%8a%e7%bc%96%e8%af%91-go-%e7%a8%8b%e5%ba%8f%e6%97%a0%e6%b3%95%e8%bf%90%e8%a1%8c%ef%bc%8c%e6%8f%90%e7%a4%ba%e6%89%be%e4%b8%8d%e5%88%b0%e6%96%87%e4%bb%b6.html | 运维·速度

该日志由 Fisher 于2018年03月19日发表在 docker, 虚拟化 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: docker 容器上编译 go 程序无法运行,提示找不到文件 | 运维·速度
关键字: ,

docker 容器上编译 go 程序无法运行,提示找不到文件:等您坐沙发呢!

发表评论


Time limit is exhausted. Please reload the CAPTCHA.

快捷键:Ctrl+Enter