95

GOOS=linuxおよびを使用して Go でコンパイルされ、に基づくコンテナーGOARCH=amd64にデプロイされたバイナリを指定すると、docker エンジン ホストが Ubuntu (15.10) の場合、バイナリは実行されません。dockeralpine:3.3

sh: /bin/artisan: not found

この同じバイナリ (同じ OS とアーキテクチャ用にコンパイルされたもの) は、Docker エンジン ホスト(のベース) が Mac OS X 上の VirtualBox VM 内にデプロイされている場合に問題なく動作します。busyboxalpine

コンテナーが 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 
4

6 に答える 6