How to continue a Docker container which has exited
DockerDocker Problem Overview
Consider:
docker run -it centos /bin/bash
I pressed Ctrl+D to exit it.
I want to continue to run this container, but I found I can't.
The only method is
docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash
Am I right? Is there a better method? (I'm using docker 0.8.0.)
Docker Solutions
Solution 1 - Docker
You can restart an existing container after it exited and your changes are still there.
docker start `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Solution 2 - Docker
docker start -a -i `docker ps -q -l`
Explanation:
docker start
start a container (requires name or ID)
-a
attach to container
-i
interactive mode
docker ps
List containers
-q
list only container IDs
-l
list only last created container
Solution 3 - Docker
Use:
docker start $(docker ps -a -q --filter "status=exited")
This will start all containers which are in the exited state.
docker exec -it <container-id> /bin/bash
This will connect to the particular container.
Solution 4 - Docker
If you want to do it in multiple, easy-to-remember commands:
- list stopped containers:
docker ps -a
- copy the name or the container id of the container you want to attach to, and start the container with:
docker start -i <name/id>
The -i
flag tells docker to attach to the container's stdin.
If the container wasn't started with an interactive shell to connect to, you need to do this to run a shell:
docker start <name/id>
docker exec -it <name/id> /bin/sh
The /bin/sh
is the shell usually available with alpine-based images.
Solution 5 - Docker
If you want to continue exactly one Docker container with a known name:
docker start `docker ps -a -q --filter "name=elas"`
Solution 6 - Docker
Follow these steps:
-
Run below command to see that all the container services both running and stopped on. Option
-a
is given to see that the container stops as welldocker ps -a
-
Then start the docker container either by
container_id
or container tag namesdocker start <CONTAINER_ID> or <NAMES>
Say from the above picture, container id
4b161b302337
So command to be run is
docker start 4b161b302337
3. One can verify whether the container is running with
docker ps
Solution 7 - Docker
If you have a named container then it can be started by running
docker container start container_name
where container_name is name of the container that must be given at the time of creating container. You can replace container_name
with the container id in case the container is not named. The container ID can be found by running:
docker ps -a
Solution 8 - Docker
These commands will work for any container (not only last exited ones). This way will work even after your system has rebooted. To do so, these commands will use "container id".
Steps:
-
List all dockers by using this command and note the container id of the container you want to restart:
docker ps -a
-
Start your container using container id:
docker start <container_id>
-
Attach and run your container:
docker attach <container_id>
NOTE: Works on linux
Solution 9 - Docker
by name
sudo docker start bob_the_container
or by Id
sudo docker start aa3f365f0f4e
this restarts stopped container, use -i to attach container's STDIN or instead of -i you can attach to container session (if you run with -it)
sudo docker attach bob_the_container
Solution 10 - Docker
If you just want to start a container with status 'Exited', just type:
sudo docker start container_name
Without sudo. See more
docker start container_name
If container name doesn't work, replace the name to container id
Solution 11 - Docker
Run your container with --privileged flag.
docker run -it --privileged ...
Solution 12 - Docker
docker start `docker ps -a | awk '{print $1}'`
This will start up all the containers that are in the 'Exited' state
Solution 13 - Docker
For those coming here in 2021 and beyond, the following command will do what the accepted answer will do in one line.
$ docker start -ai $(docker ps -q -l)
Solution 14 - Docker
In my case, the docker container exits cleanly when I start it so none of the above worked. What I needed was a way to change the command to be run.
With docker-compose I was able to change the command by running:
docker-compose run <container name in docker-compose.yml> bash
e.g.
docker-compose run app bash
Note! This actually recreates the container, so it is not run on the previous instance.