首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:无法执行二进制文件

Docker:无法执行二进制文件
EN

Stack Overflow用户
提问于 2020-04-06 15:59:11
回答 3查看 22.9K关注 0票数 15

我不能在我的docker容器中运行任何二进制文件。

Dockerfile:

代码语言:javascript
复制
FROM ubuntu:eoan AS compiler-build

RUN apt-get update && \
    dpkg --add-architecture i386 && \
    apt-get install -y gcc \
                       gcc-multilib \
                       make \
                       cmake \
                       git \
                       python3.8 \
                       bash

WORKDIR /home
ADD . /home/pawn
RUN mkdir build
WORKDIR /home/build
ENTRYPOINT ["/bin/bash"]
CMD ["/bin/bash"]

我甚至不能使用file内置:

代码语言:javascript
复制
[root@LAPTOP-EJ5BH6DJ compiler]:~/dev/private/SAMP/compiler (v13.11.0) (master) dc run compiler file bash
/usr/bin/file: /usr/bin/file: cannot execute binary file
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-11 05:08:26

来自this forum thread

当您在入口点中使用不带"-c“参数的shell时,会出现此错误

因此,如果将Dockerfile更改为以

代码语言:javascript
复制
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]

然后你就可以运行二进制文件了。

请注意手册页中/bin/bash选项的用途:

  • -l:使bash表现得如同它已被作为登录shell

调用一样

  • -c:如果存在-c选项,则从第一个非选项参数command_string中读取命令。如果command_string后面有参数,则将第一个参数分配给$0,并将其余所有参数分配给位置参数。对$0的赋值设置外壳的名称,该名称用于警告和错误消息。

此外,关于如何同时使用ENTRYPOINTCMD以及它们的不同之处,this article是一本值得一读的书。

编辑:Here的另一篇文章介绍了一个简单的(但比第一篇文章更清楚)使用echo内置外壳的示例。

编辑:下面是我链接的第二篇文章中的简单示例的改编:

代码语言:javascript
复制
FROM ubuntu
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD [ "ls" ]
代码语言:javascript
复制
$ docker build -t test .

$ docker run --rm test
bin
boot
...
var

$ docker run --rm test "ls etc"
adduser.conf
alternatives
apt
...
update-motd.d
xattr.conf

请注意ls /etc周围的"。如果没有引号,参数/etc似乎不会像我预期的那样传递给ls命令。

票数 29
EN

Stack Overflow用户

发布于 2020-04-07 00:59:16

似乎入口点不能指向/bin/bash。移除ENTRYPOINT ["/bin/bash"]就足以使其正常工作。

票数 7
EN

Stack Overflow用户

发布于 2021-12-16 13:12:56

我也犯了同样的错误。与其他答案不同,我的错误与我的docker run参数有关:

代码语言:javascript
复制
# failed
docker run -it $(pwd | xargs basename):latest bash

# worked
docker run -it $(pwd | xargs basename):latest

我不需要添加bash,因为我的Dockerfile文件中已经有了:

代码语言:javascript
复制
ENTRYPOINT ["/bin/bash"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61055324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档