将C / C ++二进制可执行文件作为docker容器运行

时间:2017-11-07 23:59:38

标签: docker executable

我是容器世界的新手,并探索在容器上运行我的应用程序的选项。这就是我所看到的事情:

  1. 当我包含编译和构建C / C ++二进制文件作为docker图像本身的一部分时,它可以解决任何问题。容器启动,一切正常。

  2. 如果我尝试在容器中使用CMD [“./helloworld”]运行已编译的现有二进制文件它会抛出此错误 standard_init_linux.go:185:exec用户进程导致“exec格式错误”。

  3. 有关如何摆脱这个问题的任何想法?这似乎是一个已经解决的基本问题

    这是我的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”
    

1 个答案:

答案 0 :(得分:1)

问题是您正试图在容器中运行不兼容的二进制格式...

您正在运行基于Ubuntu的容器(FROM ubuntu)行,但您正在尝试运行Mach-O二进制文件。默认情况下,Linux不会运行mach-o二进制文件。

为目标平台(Ubuntu / Linux)构建二进制文件,它将运行良好。您似乎正在运行Mac OS X,因此您可以安装Ubuntu VM来编译二进制文件并将其传输以供容器使用。

当你在容器中构建它时,它的工作原理是因为它将构建在正确的平台上。