专栏首页阶梯计划Alpine linux容器中运行go的二进制文件
原创

Alpine linux容器中运行go的二进制文件

环境

  • docker version:1.10.3
  • alpine linux version:3.8

问题

将golang编译的二进制文件 opena 拷贝到容器的 /usr1 下面,执行显示:

/usr1/opena help
sh: /usr1/opena: not found

查看下依赖库:

ldd /usr1/opena
    /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)

但是alpine没有对应的依赖库

解决方案

看到一个贴子,某高人给出方案:

mkdir /lib64
ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

然后就可以正常工作了,原理是musl和glibc是兼容的,通过创建该符号链接修复缺少的依赖项。alpine这个5M的镜像也能满足go二进制文件的运行环境!~

题外话

对于用alpine作为go的编译环境同样存在上述问题,同样用相同方法可以解决。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 搭建vscode golang开发环境

    由于网络限制,go的很多工具都无法直接下载,因此在github上自定义一个gopath的仓,将需要的工具仓都加入进来:

    DifficultWork
  • PCEP导读

    PCEP的全称是Path Computation Element Communication Protocol,直译过来就是路径计算单元通信协议。简单概括就是一...

    DifficultWork
  • grpc-go基于双向认证安全通信

    grpc-go本身已经支持安全通信,该文是举例介绍下双向认证的安全通信,客户端和服务端是如何实现的。

    DifficultWork
  • 编译自定义Python二进制程序

    工作中需要自行编译一个Python二进制程序,并尽量减少该程序依赖的库文件,使之在相同CPU架构上有更良好的可移植性。先找了下网上的资料,都不太详尽,经过探索最...

    jeremyxu
  • LiteAVSDK集成,动态加载so库

    安卓开发中使用Android studio集成三方SDK(比如腾讯视频云移动直播、播放器、短视频、实时音视频),通常有两种集成方式:aar集成、jar+so集成...

    腾讯云-chaoli
  • CentOS6配置odbc访问Oracle

    囚兔
  • 为什么面试邀请那么多,总是拿不到offer?

    有很多人有这样的疑惑:自己面试邀请不少,面试的过程自我感觉也不错,但面试完就没有音讯了,为什么呢?

    张树臣
  • Android 动态库压缩壳的实现

    计算机软件领域所说的壳实际上是一种软件加密技术。壳主要分为两大类:加密壳和压缩壳,加密壳侧重于防止软件被篡改,而压缩壳则侧重于减小软件体积。其实,在Window...

    小时光
  • SDK热更系列之如何获取应用在当前设备上的so对应的指令集

    子勰
  • 如何快速定位native方法在对应so中的位置前言原理

    在逆向的时候,有些应用有一大堆的so,而且都是提前加载好,有的so甚至做了处理,很难看出函数名。本文讲述的方法可以快速定位:

    用户2930595

扫码关注云+社区

领取腾讯云代金券