To start a stopped Docker container with a different command, we can
use the docker start command with the
--detach-keys flag. We can also use the
docker run command to create a new container with a new
command from the original image. This way, we can run the container with
the command we want while keeping the original settings. This method is
simple and helps us change how our Docker containers run without losing
any data or settings.
In this article, we will look at different ways to start a stopped Docker container with a different command. We will talk about using Docker Run, Docker Commit, Docker Exec, and how to change Docker container commands in Dockerfiles for later use. We will also show how to start a stopped container using shell commands. Plus, we will answer some common questions about this topic. Here is what we will cover:
- How to Start a Stopped Docker Container Using a Different Command
- Using Docker Run to Start a Stopped Container with a New Command
- How to Use Docker Commit to Create a New Image and Start a Container
- Using Docker Exec to Run a Different Command in a Stopped Container
- Changing Docker Container Command in Dockerfile for Future Starts
- How to Start a Stopped Docker Container with a Shell Command
- Frequently Asked Questions
For more info about Docker, we think these links are helpful: What is Docker and Why Should You Use It?, What are Docker Images and How Do They Work?, and How to List and Inspect Docker Images.
Using Docker Run to Start a Stopped Container with a New Command
We can start a stopped Docker container with a new command using the
docker run command and the --entrypoint
option. This lets us set a new command that replaces the default command
in the Docker image. But remember, docker run makes a new
container. So, we must make sure to copy the original container’s
settings like volumes and environment variables.
Here’s how we can do it:
Identify the Stopped Container: First, we need to see our stopped containers. This helps us find the one we want to restart.
docker ps -a --filter "status=exited"Create a New Container with a Different Command: Next, we use the
docker runcommand with the--entrypointoption to set the new command.docker run --name new_container_name --entrypoint new_command -d original_image_nameReplace
new_container_namewith a name we want for the new container. Changenew_commandwith the command we want to run. Also, putoriginal_image_namewith the name of the image for the stopped container.Example: Let’s say we have a stopped container from an image called
my_app. If we want to start it with a different command likemy_script.sh, we can do this:docker run --name my_new_app --entrypoint /path/to/my_script.sh -d my_app
This command makes a new container named my_new_app that
runs my_script.sh from the my_app image. The
original stopped container will stay the same.
We must also manage any needed environment variables and volumes from
the old container. We can do this by adding the right flags like
-e for environment variables and -v for
volumes to the docker run command.
For more details on Docker container commands and settings, we can check related articles on Docker Images and How They Work.
How to Use Docker Commit to Create a New Image and Start a Container
We can start a stopped Docker container with a different command. To
do this, we use the docker commit command. This command
helps us create a new image from the existing container. With this, we
can change the command that runs when we start the new container.
Identify the Stopped Container: First, we need to find the container ID or name of the stopped container we want to change. We can list all containers, even the stopped ones, with this command:
docker ps -aCommit the Container: Next, we use the
docker commitcommand to make a new image from the stopped container. We also say what new command we want to run in the container using the--changeoption. Replace<container_id>with the ID or name of your container and<new_image_name>with what you want to name your new image.docker commit --change 'CMD ["your_new_command"]' <container_id> <new_image_name>For example, if we want to run a new script in the container:
docker commit --change 'CMD ["python", "new_script.py"]' my_stopped_container my_new_imageStart the New Container: After we commit the new image, we can start a container from this image with:
docker run -d <new_image_name>If we want to run it interactively, we can use:
docker run -it <new_image_name>
This way, we can change the command that runs in our container
without changing the original image or Dockerfile. For more advanced use
of Docker, we can learn about other commands like
docker exec or docker run for special cases.
We can read more about Docker images and how they work here.
Leveraging Docker Exec to Run a Different Command in a Stopped Container
We can run a different command in a stopped Docker container using
the docker exec command. But we can’t use this command
directly in a stopped container. First, we need to restart the
container. Then we can tell it to run a different command.
Restart the Stopped Container: We use the
docker startcommand to get the container running again.docker start <container_name_or_id>Execute a Different Command: After the container is running, we can run a new command with
docker exec.docker exec -it <container_name_or_id> <new_command>
For example, if we have a stopped container called
my_container and we want to start a shell inside it, we do
this:
docker start my_container
docker exec -it my_container /bin/bashIf the container is not running, we can also do both steps in one
line. We use docker run with the --rm option
to create a new instance of the container with the new command:
docker run --rm --name <new_container_name> <image_name> <new_command>This way, we can run different commands without changing the original container setup. We should always check that the commands work well with the container’s environment. For more help on container management, we can look at how to stop and start Docker containers.
Modifying Docker Container Command in Dockerfile for Future Starts
To change the command a Docker container runs when it starts, we can
use the CMD or ENTRYPOINT in our Dockerfile.
This helps us make sure that every time the container starts, it runs
the command we choose.
Example Usage of CMD
The CMD instruction gives default settings for a running
container. It can include a program, or we can list them in a JSON
array.
FROM ubuntu:latest
# Install necessary packages
RUN apt-get update && apt-get install -y curl
# Set the default command
CMD ["curl", "--version"]Example Usage of ENTRYPOINT
ENTRYPOINT lets us set a container that runs like a
program. This is good because it makes sure the container runs a
specific command no matter what extra inputs we give it at runtime.
FROM ubuntu:latest
# Set the entry point
ENTRYPOINT ["python3", "-m", "http.server"]
# Optional CMD to provide a default argument
CMD ["8000"]In this example, when we run the container, it will start a Python HTTP server on port 8000 by default.
Overriding CMD and ENTRYPOINT
When we use docker run, we can change the
CMD in the Dockerfile by giving a different command:
docker run your-image-name ls -lTo change an ENTRYPOINT, we use the
--entrypoint flag:
docker run --entrypoint /bin/bash your-image-nameBest Practices
- Use
ENTRYPOINTfor the main command that should not be changed. - Use
CMDfor default arguments that we can change. - Think about using environment variables for settings that need to change.
By changing the command in the Dockerfile, we can make sure our Docker containers start with the behavior we want. For more details about Docker and its commands, check out what is a Docker container and how does it operate.
How to Start a Stopped Docker Container with a Shell Command
To start a stopped Docker container with a shell command, we can use
the docker start command. Just add the container name or ID
after it. If we want to run a different command than the one in the
Dockerfile, we need to use the docker run command. The
docker start command does not let us change the
command.
Using docker start
Command
To restart a stopped container, we can do it like this:
docker start <container_name_or_id>This command will start the container using the command that is in the Docker image.
Using
docker run for a New Command
If we want to start a new instance of the container with a different
command, we can use docker run. We can add the
--rm flag to remove the container after it stops:
docker run --rm <image_name> <new_command>Example of Starting a Stopped Container with a Shell Command
If we have a container named my_container and we want to
start it with a new shell command, we would do this:
Start the original container (if we want it to run normally):
docker start my_containerRun a new command in a new container instance:
docker run --rm --name my_new_container my_image /bin/bash
Important Notes
- If we need to pass environment variables or port mappings, we can
add those in the
docker runcommand. - Remember that
docker startcannot change the command; it just resumes the container as it was running before. To change the command, we must create a new container usingdocker run.
For more details on Docker commands and how to use them, we can check Docker’s documentation on how to manage containers.
Frequently Asked Questions
1. How do we start a stopped Docker container with a different command?
To start a stopped Docker container with another command, we can use
the docker start command. Just follow it with the container
ID or name. But if we want to run a different command than the one in
the Dockerfile, we need to make a new container from the original image.
We can do this with docker run. For more steps, check our
guide on how to start a stopped Docker container using a
different command.
2. Can we modify the command of a running Docker container?
No, we cannot change the command of a running Docker container
directly. If we want to change it, we can make a new container from the
same image with our command using docker run. Another way
is to use docker commit to create a new image with the
changes before starting a new container. Learn more about how to use Docker commit to create a new image.
3. Is it possible to run a command in a stopped Docker container?
Yes, we can run a command in a stopped Docker container. We use the
docker start command with the -i option to
connect to the container’s input. But if the container is stopped, we
usually need to start it with a new command using
docker run. For details, check our section on leveraging Docker exec.
4. How can we create a new image from a stopped Docker container?
To create a new image from a stopped Docker container, we use the
docker commit command. We follow it with the container ID
or name and the new image name. This lets us save the current state of
the container. Then we can start a new one with that image. For more
details, read our article on how to use Docker
commit.
5. Is there a way to change the default command in a Dockerfile?
Yes, we can change the default command in a Dockerfile. We do this by
using the CMD or ENTRYPOINT instructions. We
just change these in our Dockerfile and then rebuild our image with
docker build. This makes sure that every new container from
that image starts with the updated command. For more info, visit our
guide on what is a Dockerfile and how do you create
one.