I am creating an image from another image that set a specific entrypoint. However I want my image to have default one. How do I reset the ENTRYPOINT?
I tried the following Dockerfile:
FROM some-image
ENTRYPOINT ["/bin/sh", "-c"]
Unfortunately it doesn't work like the default entrypoint as it need the command to be quoted.
docker run myimage ls -l / # "-l /" arguments are ignored
file1 file2 file3 # files in current working directory
docker run myimage "ls -l /" # works correctly
How do I use commands without quoting?
This isn't really related to docker. Try running the following:
/bin/sh -c echo foo
/bin/sh -c "echo foo"
The
-c
means that/bin/sh
only picks up one argument. So removing the-c
from the entrypoint you define should fix it. This is more flexible than resetting the entry point; e.g. you can do this to use Software Collections:ENTRYPOINT ["scl", "enable", "devtoolset-4", "--", "bash"]
To disable an existing
ENTRYPOINT
, set an empty array in your docker fileThen your arguments to
docker run
will exec as normal.The reason your
ENTRYPOINT ["/bin/sh", "-c"]
requires quoted strings is that without the quotes, the arguments tols
are being passed tosh
instead.Unquoted results in lots of arguments being sent to
sh
Quoting allows the complete command (
sh -c
) to be passed on tosh
as one argument.