Instalado Ir binario no se encuentra en la ruta en Alpine Linux Docker


Tengo un binario Go que estoy tratando de ejecutar en la imagen de Alpine Docker.

Esto funciona bien para el Docker Go binario.

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 instalar.

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 al ejecutar 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 Go instalado no se encuentra en path en Alpine Linux Docker?

Author: Community, 2016-01-11

5 answers

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

Dado que musl y glibc so son compatibles, puede hacer este enlace simbólico y corregirá la dependencia que falta.

 70
Author: sheldonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-24 22:36:49

Compilé go binario en alpine con estas opciones

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

Funcionó.

 17
Author: Kuldeep Singh Pal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-13 18:35:44

Cuando se compila bajo Debian 9 (Stretch) / Go 1.10.2 y se ejecuta bajo Alpine 3.7.0:

CGO_ENABLED=0 go build

Ni GOOS=linux ni GOARCH=amd6 eran necesarios.

 1
Author: knite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-11 23:09:24

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

- x-a-tags netgo-installsuffix netgo

Después no tiene que preocuparse por vincular las bibliotecas correctas.

 0
Author: johannzhaojohann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-15 20:40:40

Alternativamente, puede (mientras tanto) usar 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)
 0
Author: jotrocken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 09:02:24