相关疑难解决方法(0)

Go编译的二进制文件不会在Ubuntu主机上的alpine docker容器中运行

给定一个二进制文件,使用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)

go busybox docker alpine-linux

54
推荐指数
4
解决办法
2万
查看次数

标签 统计

alpine-linux ×1

busybox ×1

docker ×1

go ×1