docker restart container failed: "already in use", but there's no more docker image docker restart container failed: "already in use", but there's no more docker image nginx nginx

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.