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