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
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 .
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
Le fichier Dockerfile suivant a fonctionné pour moi. Plus simple et plus abstrait.
https://github.com/mickep76/Alpine-golang/blob/master/Dockerfile