【问题标题】:Running C/C++ binary executable as a docker container将 C/C++ 二进制可执行文件作为 docker 容器运行
【发布时间】:2017-11-07 23:59:38
【问题描述】:

我是容器世界的新手,正在探索在容器上运行我的应用程序的选项。以下是我所看到的:

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

  2. 如果我尝试在容器中使用 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"]

她是我的 exe:

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”

【问题讨论】:

  • 在提问之前您不阅读文档吗?
  • 这与 C 或 C++ 语言有什么关系?二进制可执行文件可以从多种语言生成,例如 FORTRAN 和 BASIC。
  • 恕我直言,您知道自己在做什么吗?

标签: docker executable


【解决方案1】:

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

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

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

当您在容器中构建它时,它可以工作,因为它将构建到正确的平台。

【讨论】:

  • 感谢您的信息。我在想 MAC 二进制文件可以在 docker 容器上运行。我通过为 Ubuntu 构建二进制文件解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2023-04-04
  • 2017-12-17
相关资源
最近更新 更多