web-dev-qa-db-fra.com

Binaire Go installé introuvable dans le chemin sur Alpine Linux Docker

J'ai un binaire Go que j'essaie d'exécuter sur l'image Alpine Docker.

Cela fonctionne très bien pour le binaire Docker Go.

docker run -it Alpine:3.3 sh
apk add --no-cache curl

DOCKER_BUCKET=get.docker.com
DOCKER_VERSION=1.9.1
curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/local/bin/docker
chmod +x /usr/local/bin/docker
docker help
Usage: docker [OPTIONS] COMMAND [arg...]
...

Cependant, pour le binaire Go, je veux installer.

RACK_BUCKET=ec4a542dbf90c03b9f75-b342aba65414ad802720b41e8159cf45.ssl.cf5.rackcdn.com
RACK_VERSION=1.1.0-beta1
curl -fSL "https://${RACK_BUCKET}/${RACK_VERSION}/Linux/AMD64/rack" -o /usr/local/bin/rack
chmod +x /usr/local/bin/rack

rack help
sh: rack: not found

/usr/local/bin/rack help
sh: /usr/local/bin/rack: not found

ls -al /usr/local/bin/
total 43375
drwxr-xr-x    2 root     root          1024 Jan 11 18:10 .
drwxr-xr-x    8 root     root          1024 Jan 11 18:09 ..
-rwxr-xr-x    1 root     root      30222575 Jan 11 18:09 docker
-rwxr-xr-x    1 root     root      14190576 Jan 11 18:10 rack

which rack
/usr/local/bin/rack

J'ai pensé que cela pourrait avoir quelque chose à voir avec cette réponse mais je n'ai pas la même erreur lors de l'exécution de ldd.

ldd /usr/local/bin/rack
    /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000)

Aucune idée avec ce binaire Go installé ne se trouve dans le chemin sur Alpine Linux Docker?

41
Everett Toews
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

Puisque le musl et la glibc sont donc compatibles, vous pouvez créer ce lien symbolique et cela corrigera la dépendance manquante.

98
sheldonk

J'ai compilé go binary en Alpine avec ces options

GOOS=linux GOARCH=AMD64 CGO_ENABLED=0 go build -o [name of binary]

Ça a marché.

23
Kuldeep Singh Pal

Lors de la construction sous Debian 9 (Stretch)/Go 1.10.2 et sous Alpine 3.7.0:

CGO_ENABLED=0 go build

Ni GOOS=linux ni GOARCH=AMD6 était nécessaire.

7
knite

Selon la nature du programme, vous souhaiterez peut-être compiler votre programme go avec des options de liens statiques, telles que les suivantes:

-x -a -tags netgo -installsuffix netgo

Ensuite, vous n'avez pas à vous soucier de lier les bonnes bibliothèques.

1
johannzhaojohann

Alternativement, vous pouvez (pendant ce temps) utiliser le golang:Alpine image de Docker Hub pour compiler et exécuter votre code.

docker run -v ${YOUR_CODE_PATH}:/go/src/example -it golang:Alpine sh
cd src/example
go build .
ldd example
    /lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
    libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
0
jotrocken