如何在Alpine中构建Golang程序

Alpine 作为最小的附带包管理工具的Linux镜像 用来给二进制程序打包是最好不过了 不过需要补全一些类库

已知问题

编译的程序 运行时提示 Not Found

  • 原因 缺少net库
  • 解决方案
    • 方案一
      • 安装 libc6-compat
      • 执行 apk add libc6-compat
    • 方案二
      • 打包的时候 添加参数 使用纯go的net
      • 执行 CGO_ENABLED=0 go build -tags netgo -a -v

编译时提示 running gcc failed

1
2
3
4
5
6
/usr/lib/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find Scrt1.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find crti.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lpthread
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lssp_nonshared
collect2: error: ld returned 1 exit status
  • 原因 缺少头文件和库
  • 解决方案
    • 安装类库
    • 执行 apk add musl-dev