I can't run any binary in my docker container.
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"]
I can't even use file
builtin:
[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
This error typically occurs when a binary file for a certain processor architecture is run on a different architecture e.g., an x86 executable is run on an ARM CPU.
Press "Enter" on the keyboard after every command you enter into Terminal. You can also execute a file without changing to its directory by specifying the full path. Type "/path/to/NameOfFile" without quotation marks at the command prompt. Remember to set the executable bit using the chmod command first.
CMD vs ENTRYPOINT: Fundamental differences CMD commands are ignored by Daemon when there are parameters stated within the docker run command. ENTRYPOINT instructions are not ignored but instead are appended as command line parameters by treating those as arguments of the command.
From this forum thread:
This error occurs when you use a shell in your entrypoint without the "-c" argument
So, if you change your Dockerfile
to end with
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
then you can run binary files.
Note the purpose of the options for /bin/bash
, from the manpage:
-l
: Make bash act as if it had been invoked as a login shell
-c
: If the -c
option is present, then commands are read from the first non-option argument command_string
. If there are arguments after the command_string
, the first argument is assigned to $0
and any remaining arguments are assigned to the positional parameters. The assignment to $0
sets the name of the shell, which is used in warning and error messages.
Additionally, this article is a worthwhile read on how to use both ENTRYPOINT
and CMD
together, and what their differences are.
EDIT: Here's another article that goes into a trivial (but clearer than the first article) example using the echo
shell builtin.
EDIT: Here's an adaptation of the trivial example from the second article I linked:
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
Note the "
around ls /etc
. Without the quotes, the argument /etc
doesn't seem to be passed to the ls
command as I might expect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With