Скомпилированный в Go двоичный файл не будет работать в контейнере Alpine Docker на хосте Ubuntu
Данный бинарный файл, скомпилированный с помощью GoGOOS=linux
а такжеGOARCH=amd64
развернут вdocker
контейнер на основеalpine:3.3
двоичный файл не будет работать, если хостом механизма докера является Ubuntu (15.10):
sh: /bin/artisan: not found
Этот же бинарный файл (скомпилированный для той же ОС и Arch) будетбеги просто отлично если хост механизма докераbusybox
(который является основой дляalpine
) развернут в виртуальной машине VirtualBox на Mac OS X.
Этот же двоичный файл также будет отлично работать, если контейнер основан на одном из образов Ubuntu.
Любая идея, что этот двоичный файл отсутствует?
Это то, что я сделал для воспроизведения (успешный запуск в VirtualBox / busybox на OS X не показан):
Build (сборка явно с флагами, даже если арка совпадает):
➜ artisan git:(master) ✗ GOOS=linux GOARCH=amd64 go build
Проверьте, может ли он работать на хосте:
➜ artisan git:(master) ✗ ./artisan
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build
Скопируйте в docker dir, соберите, запустите:
➜ 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
Теперь изменив базу изображения наphusion/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