official library images hub golang dockerize development app linux go docker alpine

linux - library - golang docker



Installed Go binary no encontrado en la ruta en Alpine Linux Docker (5)

Tengo un binario Go que intento ejecutar en la imagen Alpine Docker.

Esto funciona bien para el binario 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...] ...

Sin embargo, para el binario Go, quiero instalarlo.

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

Pensé que podría tener algo que ver con esta respuesta, pero no obtengo el mismo error cuando 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)

¿Alguna idea con este binario de Go instalado no se encuentra en la ruta de Alpine Linux Docker?


Al construir bajo Debian 9 (Stretch) / Go 1.10.2 y ejecutarse bajo Alpine 3.7.0:

CGO_ENABLED=0 go build

Ni GOOS=linux ni GOARCH=amd6 fueron necesarios.


Alternativamente, puede (mientras tanto) utilizar la imagen golang:alpine de Docker Hub para compilar y ejecutar su código.

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)


Dependiendo de la naturaleza del programa, es posible que desee compilar su programa go con las opciones de enlace estático, como las siguientes:

-x -a -tags netgo -installsuffix netgo

Después, no necesita preocuparse por vincular las bibliotecas correctas.


He compilado ir binario en alpino con estas opciones

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

Funcionó.


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

Como el musl y el glibc son compatibles, puedes hacer este enlace simbólico y arreglará la dependencia faltante.