O binário compilado por Go não será executado em um contêiner de docker alpino no host do Ubuntu
Dado um binário, compilado com Go usandoGOOS=linux
eGOARCH=amd64
, implantado em umdocker
recipiente com base emalpine:3.3
, o binário não será executado se o host do mecanismo estivador for Ubuntu (15.10):
sh: /bin/artisan: not found
Esse mesmo binário (compilado para o mesmo sistema operacional e arco)corra bem se o host do mecanismo docker forbusybox
(que é a base paraalpine
) implantado em uma VM do VirtualBox no Mac OS X.
Esse mesmo binário também funcionará perfeitamente se o contêiner for baseado em uma das imagens do Ubuntu.
Alguma idéia do que esse binário está faltando?
Isto é o que eu fiz para reproduzir (execução bem-sucedida no VirtualBox / busybox no OS X não mostrado):
Construção (construção explicitamente com sinalizadores, embora o arco corresponda):
➜ artisan git:(master) ✗ GOOS=linux GOARCH=amd64 go build
Verifique se ele pode ser executado no host:
➜ artisan git:(master) ✗ ./artisan
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build
Copie para o docker dir, crie, execute:
➜ 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
Agora alterando a base da imagem paraphusion/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