我是容器世界的新手,并探索在容器上运行我的应用程序的选项。这就是我所看到的事情:
当我包含编译和构建C / C ++二进制文件作为docker图像本身的一部分时,它可以解决任何问题。容器启动,一切正常。
如果我尝试在容器中使用CMD [“./helloworld”]运行已编译的现有二进制文件它会抛出此错误 standard_init_linux.go:185:exec用户进程导致“exec格式错误”。
有关如何摆脱这个问题的任何想法?这似乎是一个已经解决的基本问题
这是我的dockerfile:
来自ubuntu
COPY . /Users/test//Documents/CPP-Projects/HelloWorld-Static
WORKDIR /Users/test/Documents/CPP-Projects/HelloWorld-Static
CMD ["./build/exe/hellostatic/hellostatic"]
她是我的执行官:
gobjdump -a build/exe/hellostatic/hellostatic
build/exe/hellostatic/hellostatic: file format mach-o-x86-64
build/exe/hellostatic/hellostatic
这是错误:
docker run test
standard_init_linux.go:185: exec user process caused “exec format error”
答案 0 :(得分:1)
问题是您正试图在容器中运行不兼容的二进制格式...
您正在运行基于Ubuntu的容器(FROM ubuntu)行,但您正在尝试运行Mach-O二进制文件。默认情况下,Linux不会运行mach-o二进制文件。
为目标平台(Ubuntu / Linux)构建二进制文件,它将运行良好。您似乎正在运行Mac OS X,因此您可以安装Ubuntu VM来编译二进制文件并将其传输以供容器使用。
当你在容器中构建它时,它的工作原理是因为它将构建在正确的平台上。