Ideally you should restructure your application to avoid needing to override the entrypoint.
Remember that, when you run an image, the ENTRYPOINT and CMD are combined to form a single command. If you'll frequently be replacing this (combined) command string, it's best to put the whole command into CMD. If you have ENTRYPOINT at all, it should be a wrapper that runs the command passed to it as arguments (in a shell script, with exec "$@").
# Optional entrypoint -- MUST be JSON-array syntax, and MUST `exec "$@"`
# ENTRYPOINT ["/entrypoint.sh"]
CMD python ... whatever you had before
Then once you do this, you can easily override the command part at the docker run command
docker run my_image python -m unittest discover
(There are two other ENTRYPOINT patterns I've seen. One is a "container as command" pattern, where the entire command line is in ENTRYPOINT, and the command part is used to take additional arguments; this supports a docker run imagename --extra-args pattern. If you really need this pattern, see below to override the whole thing. The second arbitrarily splits ENTRYPOINT ["python"], CMD ["script.py"], but there's no particular reason to do this; just combine them into CMD.)
If you can't refactor your image's Dockerfile, then you need to override --entrypoint. This option only takes a single command word, though, and it's treated as a Docker option so it needs to come before the image name. That leads to this awkward construction (split into multiple lines for readability):
docker run \
--entrypoint python \
my_image \
-m unittest discover
Also consider the possibilities of using a non-Docker host virtual environment for routine tasks like running your service's unit tests.