我不能在我的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发布于 2020-06-11 05:08:26
当您在入口点中使用不带"-c“参数的shell时,会出现此错误
因此,如果将Dockerfile更改为以
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]然后你就可以运行二进制文件了。
请注意手册页中/bin/bash选项的用途:
-l:使bash表现得如同它已被作为登录shell调用一样
-c:如果存在-c选项,则从第一个非选项参数command_string中读取命令。如果command_string后面有参数,则将第一个参数分配给$0,并将其余所有参数分配给位置参数。对$0的赋值设置外壳的名称,该名称用于警告和错误消息。此外,关于如何同时使用ENTRYPOINT和CMD以及它们的不同之处,this article是一本值得一读的书。
编辑:Here的另一篇文章介绍了一个简单的(但比第一篇文章更清楚)使用echo内置外壳的示例。
编辑:下面是我链接的第二篇文章中的简单示例的改编:
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命令。
发布于 2020-04-07 00:59:16
似乎入口点不能指向/bin/bash。移除ENTRYPOINT ["/bin/bash"]就足以使其正常工作。
发布于 2021-12-16 13:12:56
我也犯了同样的错误。与其他答案不同,我的错误与我的docker run参数有关:
# failed
docker run -it $(pwd | xargs basename):latest bash
# worked
docker run -it $(pwd | xargs basename):latest我不需要添加bash,因为我的Dockerfile文件中已经有了:
ENTRYPOINT ["/bin/bash"]https://stackoverflow.com/questions/61055324
复制相似问题