给定一个二进制文件,使用Go编译GOOS=linux并基于此GOARCH=amd64部署到docker容器alpine:3.3,如果docker引擎主机是Ubuntu(15.10),二进制文件将不会运行:
sh: /bin/artisan: not found
Run Code Online (Sandbox Code Playgroud)
如果在Mac OS X上的VirtualBox VM中部署了docker引擎主机(它是基础),那么相同的二进制文件(针对相同的OS和arch编译)将运行得很好.busyboxalpine
如果容器基于Ubuntu映像之一,那么同样的二进制文件也将完美运行.
知道这个二进制文件丢失了吗?
这是我为重现而做的(在OS X上的VirtualBox/busybox中成功运行未显示):
构建(即使拱匹配,也使用标记显式构建):
? artisan git:(master) ? GOOS=linux GOARCH=amd64 go build
Run Code Online (Sandbox Code Playgroud)
检查它是否可以在主机上运行:
? artisan git:(master) ? ./artisan
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build
Run Code Online (Sandbox Code Playgroud)
复制到docker目录,构建,运行:
? 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) …Run Code Online (Sandbox Code Playgroud)