docker restart container failed: "already in use", but there's no more docker image
It is because
- you have used
--name
switch. - container is stopped and not removed
You find it stopped
docker ps -a
You can simply start it using below command:
docker start webserver
EDIT: AlternativesIf you want to start the container with below command each time,
docker run -d -p 80:80 --name webserver nginx
then use one of the following:
method 1: use --rm
switch i.e., container gets destroyed automatically as soon as it is stopped
docker run -d -p 80:80 --rm --name webserver nginx
method 2: remove it explicitly after stopping the container before starting the command that you are currently using.
docker stop <container name>docker rm <container name>
As the error says.
You have to remove (or rename) that container to be able to reuse that name
This leaves you two options.
You may delete the container that is using the name "webserver" using the command
docker rm 036a0bcd196c5b23431dcd9876cac62082063bf62a492145dd8a55141f4dfd74
and retry.
- Or you may use a different name during the run command. This is not recommended, as you no longer need that docker.
It's better to remove the unwanted docker and reuse the name.
While the great answers are correct, they didn't actually solve the problem I was facing.
How To:
Safely automate starting of named docker container regardless of its prior state
The solution is to wrap the docker run
command with an additional check and either do a run
or a stop
+ run
(effectively restart with the new image) based on the result.
This achieves both of my goals:
- Avoids the error
- Allows me to periodically update the image (say new build) and restart safely
#!/bin/bash# Adapt the following 3 parameters to your specific caseNAME=mynameIMAGE=myimageRUN_OPTIONS='-d -p 8080:80'ContainerID="$(docker ps --filter name="$NAME" -q)"if [[ ! -z "$ContainerID" ]]; then echo "$NAME already running as container $ContainerID: stopping ..." docker stop "$ContainerID"fiecho "Starting $NAME ..."exec docker run --rm --name "$NAME" $RUN_OPTIONS "$IMAGE"
Now I can run (or stop + start if already running) the $NAME
docker container in a idempotent way, without worrying about this possible failure.