El binario compilado por Go no se ejecutará en un contenedor Docker alpino en el host Ubuntu
Dado un binario, compilado con Go usandoGOOS=linux
yGOARCH=amd64
, desplegado en undocker
contenedor basado enalpine:3.3
, el binario no se ejecutará si el host del motor de Docker es Ubuntu (15.10):
sh: /bin/artisan: not found
Este mismo binario (compilado para el mismo sistema operativo y arco)corre bien si el host del motor de Docker esbusybox
(que es la base paraalpine
) implementado dentro de una VM VirtualBox en Mac OS X.
Este mismo binario también funcionará perfectamente bien si el contenedor se basa en una de las imágenes de Ubuntu.
¿Alguna idea de lo que falta este binario?
Esto es lo que he hecho para reproducir (ejecución exitosa en VirtualBox / busybox en OS X no se muestra):
Construir (construir explícitamente con banderas aunque el arco coincida):
➜ artisan git:(master) ✗ GOOS=linux GOARCH=amd64 go build
Comprueba que puede ejecutarse en el host:
➜ artisan git:(master) ✗ ./artisan
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build
Copiar al directorio acoplable, compilar, ejecutar:
➜ artisan git:(master) ✗ cp artisan docker/build/bin/
➜ artisan git:(master) ✗ cd docker
➜ docker git:(master) ✗ cat Dockerfile
FROM docker:1.10
COPY build/ /
➜ docker git:(master) ✗ docker build -t artisan .
Sending build context to Docker daemon 10.15 MB
Step 1 : FROM docker:1.10
...
➜ docker git:(master) ✗ docker run -it artisan sh
/ # /bin/artisan
sh: /bin/artisan: not found
Ahora cambiando la base de la imagen aphusion/baseimage
:
➜ docker git:(master) ✗ cat Dockerfile
#FROM docker:1.10
FROM phusion/baseimage
COPY build/ /
➜ docker git:(master) ✗ docker build -t artisan .
Sending build context to Docker daemon 10.15 MB
Step 1 : FROM phusion/baseimage
...
➜ docker git:(master) ✗ docker run -it artisan sh
# /bin/artisan
08:16:39.424 [ERROR] artisan: need a command, one of server, provision or build