作者:艾你如斯i | 来源:互联网 | 2022-12-06 14:12
我试图在一个Alpine Docker图像中安装Go.为此,我从下载的tar文件在这里我的高山搬运工图像内,使用以下命令将其解压缩:
tar -C/usr/local -xzf go1.10.3.linux-amd64.tar.gz
导出PATH以二进制为:
export PATH = $ PATH:/ usr/local/go/bin
然而,当我说它go version
然后它说sh: go: not found
.我对阿尔卑斯山很新.有谁知道,我在这里缺少什么?
重现步骤-
$ docker run -it alpine sh
$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
$ tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
Yogesh Jilha..
13
谢谢BMitch。
我编译了go源代码,并在高山图像容器中执行了以下步骤。
echo "installing go version 1.10.3..."
apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl go
wget -O go.tgz https://dl.google.com/go/go1.10.3.src.tar.gz
tar -C /usr/local -xzf go.tgz
cd /usr/local/go/src/
./make.bash
export PATH="/usr/local/go/bin:$PATH"
export GOPATH=/opt/go/
export PATH=$PATH:$GOPATH/bin
apk del .build-deps
go version
BMitch..
9
使用Alpine,您可以使用libmusl而不是glibc.Alpine的libmusl不是1对1替换.与glibc链接的代码将显示未找到的错误,该错误实际上来自动态链接器.您可以使用ldd查看哪些库链接到二进制文件:
/ # ldd /usr/local/go/bin/go
/lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
有两种选择.首选的选项,以及Docker在Alpine上使用的图像,是在Alpine上编译go二进制文件.您可以在Dockerfile中看到golang图像:https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/alpine3.8/Dockerfile
另一种选择是在Alpine上安装glibc,但是一旦你开始做这样的事情,我就会问为什么要使用Alpine,以及Debian或CentOS是否适合你.高山有一个关于这个主题的维基并有已创建的glibc包高山第三方.
1> Yogesh Jilha..:
谢谢BMitch。
我编译了go源代码,并在高山图像容器中执行了以下步骤。
echo "installing go version 1.10.3..."
apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl go
wget -O go.tgz https://dl.google.com/go/go1.10.3.src.tar.gz
tar -C /usr/local -xzf go.tgz
cd /usr/local/go/src/
./make.bash
export PATH="/usr/local/go/bin:$PATH"
export GOPATH=/opt/go/
export PATH=$PATH:$GOPATH/bin
apk del .build-deps
go version
2> BMitch..:
使用Alpine,您可以使用libmusl而不是glibc.Alpine的libmusl不是1对1替换.与glibc链接的代码将显示未找到的错误,该错误实际上来自动态链接器.您可以使用ldd查看哪些库链接到二进制文件:
/ # ldd /usr/local/go/bin/go
/lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
有两种选择.首选的选项,以及Docker在Alpine上使用的图像,是在Alpine上编译go二进制文件.您可以在Dockerfile中看到golang图像:https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/alpine3.8/Dockerfile
另一种选择是在Alpine上安装glibc,但是一旦你开始做这样的事情,我就会问为什么要使用Alpine,以及Debian或CentOS是否适合你.高山有一个关于这个主题的维基并有已创建的glibc包高山第三方.
3> Bevilaqua..:
以下Dockerfile为我工作。更简单,更抽象。
FROM alpine:latest
RUN apk add --no-cache git make musl-dev go
# Configure Go
ENV GOROOT /usr/lib/go
ENV GOPATH /go
ENV PATH /go/bin:$PATH
RUN mkdir -p ${GOPATH}/src ${GOPATH}/bin
# Install Glide
RUN go get -u github.com/Masterminds/glide/...
WORKDIR $GOPATH
CMD ["make"]
来源:https : //raw.githubusercontent.com/mickep76/alpine-golang/master/Dockerfile