0
点赞
收藏
分享

微信扫一扫

alpine容器二进制安装go

有点d伤 2022-01-06 阅读 90

目录结构

个人小笔记:alpine系统明明安装了go,命令行输入 go version 提示:/bin/sh: go: not found,/bin/sh: go:没有找到,就觉得很奇怪!后来到网上看了一下才知道

/ # go version
/bin/sh: go: not found

/ # go version
/bin/sh: go: not found

[root@test go]# wget https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
[root@test go]# ls
Dockerfile  go1.17.5.linux-amd64.tar.gz

Dockerfile文件

FROM alpine:3.12
ADD go1.17.5.linux-amd64.tar.gz /usr/local/
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 && \
    ln -s /usr/local/go/bin/go /usr/bin/go && ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt

FROM alpine:3.12
ADD go1.17.5.linux-amd64.tar.gz /usr/local/
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 && \
    ln -s /usr/local/go/bin/go /usr/bin/go && ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt

内容详解:

1、指定alpine版本

FROM alpine:3.12

2、去到golang官网下载安装包:Downloads - The Go Programming Language

https://go.dev/dl/go1.17.5.linux-amd64.tar.gz

3、由于Alpine镜像使用的根本不是gnu libc而是musl libc,所以/lib64/ld-linux-x86-64.so.2是不存在的,而实际上/lib64都是不存在的。

1.进入到容器,使用ldd查看二进制文件所需要的的依赖库,会发现我们的alpine根本就没有,提示动态连接库错误,ldd提示信息如下所示

上面这些alpine系统根本就没有,所以才会出现/bin/sh: go: not found

2、gnu libc和musl libc号称兼容(部分兼容),所以做个软链接过去

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

先创建lib64目录:mkdir /lib64

再做软链接:ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

举报

相关推荐

0 条评论