美文网首页
docker打包golang程序后报错找不到文件

docker打包golang程序后报错找不到文件

作者: 大机灵鬼 | 来源:发表于2022-03-27 18:45 被阅读0次

    首先是错误代码:

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

    打包的镜像并不复杂,采用的是alpine镜像作为底包,将在Ubuntu下编译好的go程序COPY进入镜像,然后执行程序。

    go程序使用了Gin,requests等库

    将程序打包好后使用docker run 报错且镜像直接退出即使加上-it等参数依然无法进入镜像。


    解决方法:

    经过查阅资料后得知,golang在编译时可以选择使用C链接库(引用的C链接库不打包进程序)或者纯Go编译(打包所有用到的内容)

    而我使用的Go版本恰好又是默认使用C链接库也就是CGO方式编译的

    在容器的底包alpine镜像中没有go程序依赖的C链接库,所以会报错找不到文件。

    因此,只需要将CGO模式关掉让程序能够脱离环境独立运行即可。

    有教程说在go build 时加上-tags netgo即可,不过我试了下不知道为什么没效果。

    所以直接采用设置env的方式

    go env -w CGO_ENABLED=0

    设置好环境变量后重新编译打包docker镜像即可。

    参考的大佬文章:

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

    相关文章

      网友评论

          本文标题:docker打包golang程序后报错找不到文件

          本文链接:https://www.haomeiwen.com/subject/pwpyjrtx.html