如何在alpine linux中安装Go

huus2vyu  于 2023-06-19  发布在  Go
关注(0)|答案(9)|浏览(275)

我正在尝试在Alpine Docker镜像中安装Go。为此,我从我的alpine docker镜像中的here下载了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
nwlqm0z1

nwlqm0z11#

我只是复制它使用多阶段建设,似乎是确定到目前为止

FROM XXX
 
COPY --from=golang:1.13-alpine /usr/local/go/ /usr/local/go/
 
ENV PATH="/usr/local/go/bin:${PATH}"
uyto3xhc

uyto3xhc2#

下面的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

u4vypkhs

u4vypkhs3#

谢谢BMitch。
我编译了go源代码,并在alpine image容器中执行了以下步骤。

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
zphenhs4

zphenhs44#

在Alpine中,使用libmusl而不是glibc。Alpine的libmusl不是一对一的替代品。链接到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)

有两个选择。首选选项,也是Alpine上docker的go镜像使用的选项,是在Alpine上编译go二进制文件。你可以在golang镜像的Dockerfile中看到:https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/alpine3.8/Dockerfile
另一个选择是在Alpine上安装glibc,但是一旦你开始这样做,我会质疑为什么要使用Alpine,Debian还是CentOS更适合你。Alpine有一个wiki topic on this,还有third parties that have created glibc packages for alpine

t1qtbnec

t1qtbnec5#

我发现让golang在alpine linux上运行的最好方法是从源代码安装它。这也是在官方的阿尔卑斯山去 Docker 图像遵循的方式。

FROM alpine:3.12

ARG GOLANG_VERSION=1.14.3

#we need the go version installed from apk to bootstrap the custom version built from source
RUN apk update && apk add go gcc bash musl-dev openssl-dev ca-certificates && update-ca-certificates

RUN wget https://dl.google.com/go/go$GOLANG_VERSION.src.tar.gz && tar -C /usr/local -xzf go$GOLANG_VERSION.src.tar.gz

RUN cd /usr/local/go/src && ./make.bash

ENV PATH=$PATH:/usr/local/go/bin

RUN rm go$GOLANG_VERSION.src.tar.gz

#we delete the apk installed version to avoid conflict
RUN apk del go

RUN go version
lzfw57am

lzfw57am6#

如果基本要求是在基于alpine的docker镜像中安装特定的go版本,请参考golang dockerhub官方账户上的images

docker pull golang:1.12-alpine
docker pull golang:1.11-alpine
toe95027

toe950277#

以防有人遇到同样的问题。
我能够安装golang1. 17. 6离子Alpine3. 15通过以下@Yogesh Jilhawar的答案。
当我运行apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl go命令时,我得到

ERROR: unable to select packages:
  go (no such packages):
    required by: world[go]

然后我试着安装"gcc-go",它安装.在那之后,我可以从源头上成功地构建Golang。

wwodge7n

wwodge7n8#

Dockerfile

ARG GOLANG_VERSION=1.20.4
RUN wget https://go.dev/dl/go${GOLANG_VERSION}.linux-amd64.tar.gz && \
    rm -rf /usr/local/go && tar -C /usr/local -xzf go${GOLANG_VERSION}.linux-amd64.tar.gz && \
    rm go${GOLANG_VERSION}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"
avkwfej4

avkwfej49#

有阿尔卑斯山包,与golang的最新版本:
pkg --update add go

相关问题