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?
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.
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é.
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.
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.
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)