How to override the CMD command in the docker run line
Solution 1
The right way to do it is deleting cmd ["..."]
docker run --name test test/test-backend /srv/www/bin/gunicorn.sh
Solution 2
The Dockerfile
uses CMD
instruction which allows defaults for the container being executed.
The below line will execute the script /srv/www/bin/gunicorn.sh
as its already provide in CMD
instruction in your Dockerfile
as a default value, which internally gets executed as /bin/sh -c /srv/www/bin/gunicorn.sh
during runtime.
docker run --name test test/test-backend
Now say if you want to run some thing else, just add that at a end of the docker run
. Now below line should run bash
instead.
docker run --name test test/test-backend /bin/bash
Ref: Dockerfile Best Practices
Solution 3
For those using docker-compose:
docker-compose run [your-service-name-here-from-docker-compose.yml] /srv/www/bin/gunicorn.sh
In my case I'm reusing the same docker service to run the development and production builds of my react application:
docker-compose run my-react-app npm run build
Will run my webpack.config.production.js
and build the application to the dist
. But yes, to the original question, you can override the CMD in the CLI.
Hetdev
Updated on December 31, 2021Comments
-
Hetdev over 2 years
How you can replace the cdm based on the docker documentation: https://docs.docker.com/reference/builder/#cmd
You can override the CMD command
Dockerfile:
RUN chmod +x /srv/www/bin/* & chmod -R 755 /srv/www/app RUN pip3 install -r /srv/www/app/pip-requirements.txt EXPOSE 80 CMD ["/srv/www/bin/gunicorn.sh"]
the docker run command is:
docker run --name test test/test-backend
I tried
docker run --name test test --cmd ["/srv/www/bin/gunicorn.sh"] docker run --name test test cmd ["/srv/www/bin/gunicorn.sh"]
But the console say this error:
System error: exec: "cmd": executable file not found in $PATH