Как установить Go в Alpine Linux - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь установить Go внутри образа Alpine Docker. Для этого я скачал tar-файл из здесь в моем образе Alpine Docker, распакуйте его, используя следующую команду:

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

Ответы [ 4 ]

0 голосов
/ 15 июня 2019

Если основное требование заключается в том, чтобы в образе докера на основе Alpine была установлена ​​конкретная версия go, то обратитесь к этим изображениям , доступным на официальной учетной записи golang dockerhub.

docker pull golang:1.12-alpine
docker pull golang:1.11-alpine
0 голосов
/ 24 сентября 2018

Спасибо BMitch.

Я скомпилировал исходный код go и выполнил следующие шаги внутри контейнера изображений Alpine.

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
0 голосов
/ 21 ноября 2018

Следующий 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

0 голосов
/ 28 августа 2018

В Alpine у ​​вас есть libmusl вместо glibc. Libmusl от Alpine не является заменой 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)

Есть два варианта. Предпочтительным вариантом, который используется Go-образами докера на Alpine, является компиляция двоичных файлов Go на Alpine. Вы можете увидеть это в Dockerfile для изображения golang: https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/alpine3.8/Dockerfile

Другой вариант - установить glibc на Alpine, но как только вы начнете делать подобные вещи, я задам вопрос, зачем вообще использовать Alpine, и будет ли Debian или CentOS более подходящим базовым образом для вас. У Alpine есть тема вики на эту , и есть третьих сторон, которые создали пакеты glibc для alpine .

...