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?
To disable an existing ENTRYPOINT
, set an empty array in your docker file
ENTRYPOINT []
Then 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 to ls
are being passed to sh
instead.
Unquoted results in lots of arguments being sent to sh
"/bin/sh", "-c", "ls", "-l", "/"
Quoting allows the complete command (sh -c
) to be passed on to sh
as one argument.
"/bin/sh", "-c", "ls -l /"
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"]