GOOS=linux
およびを使用して Go でコンパイルされ、に基づくコンテナーGOARCH=amd64
にデプロイされたバイナリを指定すると、docker エンジン ホストが Ubuntu (15.10) の場合、バイナリは実行されません。docker
alpine:3.3
sh: /bin/artisan: not found
この同じバイナリ (同じ OS とアーキテクチャ用にコンパイルされたもの) は、Docker エンジン ホスト(のベース) が Mac OS X 上の VirtualBox VM 内にデプロイされている場合に問題なく動作します。busybox
alpine
コンテナーが Ubuntu イメージの 1 つに基づいている場合、この同じバイナリも問題なく動作します。
このバイナリに何が欠けているか分かりますか?
これは私が再現するために行ったことです (OS X 上の VirtualBox/busybox での成功した実行は示されていません):
ビルド (アーチが一致してもフラグを明示的にビルド):
➜ 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