Installé Go binaire pas trouvé dans path sur Alpine Linux Docker

j'ai un binaire Go que j'essaie de lancer sur L'image de L'Alpine Docker.

cela fonctionne très bien pour le docker Go binaire.

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 que 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é qu'il pourrait avoir quelque chose à faire avec cette réponse mais je n'ai pas la même erreur lors de l'exécution 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 Go binaire installé N'est pas trouvé dans path sur Alpine Linux Docker?

28
demandé sur Community 2016-01-11 22:44:03

5 réponses

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

puisque le musl et le glibc so sont compatibles, vous pouvez faire ce lien symbolique et il corrigera la dépendance manquante.

70
répondu sheldonk 2016-02-24 22:36:49

j'ai compilé go binaire dans alpine avec ces options

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

ça a marché.

17
répondu Kuldeep Singh Pal 2016-12-13 18:35:44

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

CGO_ENABLED=0 go build

ni l'un ni l'autre GOOS=linux ni GOARCH=amd6 a été nécessaire.

1
répondu knite 2018-06-11 23:09:24

selon la nature du programme, vous pourriez vouloir compiler votre programme go avec des options de lien statique, telles que:

-x-a-tags netgo-installsuffix netgo

Ensuite, vous n'avez pas besoin de vous soucier de lier les bibliothèques appropriées.

0
répondu johannzhaojohann 2017-05-15 20:40:40

alternativement, vous pouvez (en attendant) utiliser le golang:alpine image 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
répondu jotrocken 2018-04-05 09:02:24