Docker:无法执行二进制文件

njthzxwz  于 12个月前  发布在  Docker
关注(0)|答案(4)|浏览(254)

我无法在Docker容器中运行任何二进制文件。
Dockerfile:

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内置:

[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

q5lcpyga

q5lcpyga1#

this forum thread
当您在入口点中使用没有“-c”参数的shell时,会发生此错误
因此,如果您将Dockerfile更改为

ENTRYPOINT [ "/bin/bash", "-l", "-c" ]

字符串
然后你可以运行二进制文件。
请注意/bin/bash选项的用途,参见手册页:

  • -l:使bash像登录shell一样被调用
  • -c:如果存在-c选项,则从第一个非选项参数command_string读取命令。如果command_string之后有参数,则第一个参数被分配给$0,其余参数被分配给位置参数。分配给$0设置shell的名称,该名称用于警告和错误消息。

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

编辑:Here是另一篇文章,它介绍了一个使用echo内置shell的简单(但比第一篇文章更清晰)示例。
**编辑:**这里是我链接的第二篇文章中的一个小例子的改编:

FROM ubuntu
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD [ "ls" ]
$ 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命令。

zf9nrax1

zf9nrax12#

入口点似乎不能指向/bin/bash。删除ENTRYPOINT ["/bin/bash"]就足以让它工作。

ki0zmccv

ki0zmccv3#

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

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

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

字符串
我不需要添加bash,因为我的Dockerfile中已经有了这个:

ENTRYPOINT ["/bin/bash"]

xxhby3vn

xxhby3vn4#

有时我们无法控制镜像的Dockerfile,但它的原始入口点有问题。
我们可以覆盖它的入口点来调试问题:

# example
docker run --rm \
    --entrypoint /bin/bash \
    -it apache/spark-py:v3.3.0

字符串

相关问题