web-dev-qa-db-fra.com

Comment installer Go in Alpine linux

J'essaie d'installer Go à l'intérieur d'une image Alpine Docker. Pour cela, j'ai téléchargé le fichier tar depuis ici dans mon image Alpine docker, décompressez-le à l'aide de la commande suivante:

tar -C/usr/local -xzf go1.10.3.linux-AMD64.tar.gz

pATH exporté pour aller en binaire en tant que:

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

Cependant, quand je dis go version, il est écrit que sh: go: not found. Je suis assez nouveau pour Alpine. Est-ce que quelqu'un sait, ce qui me manque ici?

Étapes à suivre pour reproduire

$ 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
Yogesh Jilhawar

Avec Alpine, vous avez libmusl au lieu de glibc. Le libmusl d'Alpine n'est pas un remplacement 1 pour 1. Le code lié à la glibc affichera une erreur introuvable qui provient en réalité de l'éditeur de liens dynamique. Vous pouvez voir quelles bibliothèques sont liées au binaire avec 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)

Il y a deux options. L'option préférée, et celle utilisée par les images de docker sur Alpine, consiste à compiler les binaires go sur Alpine. Vous pouvez le voir dans le fichier de docker pour l'image golang: https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/Alpine3.8/Dockerfile

L'autre option consiste à installer glibc sur Alpine, mais une fois que vous avez commencé à faire ce genre de chose, je me demanderais pourquoi utiliser Alpine, et si Debian ou CentOS constitueraient une image de base plus appropriée pour vous. Alpine a un sujet wiki sur ce et il y a des tiers qui ont créé des packages glibc pour Alpine .

5
BMitch

Merci BMitch.

J'ai compilé le code source go et effectué les étapes ci-dessous dans le conteneur d'images 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
3
Yogesh Jilhawar

Le fichier Dockerfile suivant a fonctionné pour moi. Plus simple et plus abstrait.

https://github.com/mickep76/Alpine-golang/blob/master/Dockerfile

0
Bevilaqua