To disable an existing ENTRYPOINT, set an empty array in your docker file
ENTRYPOINT []
Then your arguments to docker run will exec as a shell form CMD would normally.
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 /"