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

前端 未结 3 955
长情又很酷
长情又很酷 2021-01-31 15:03

I first got my nginx docker image:

docker pull nginx

Then I started it:

docker run -d -p 80:80 --name webserver nginx


        
相关标签:
3条回答
  • 2021-01-31 15:28

    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 case
    NAME=myname
    IMAGE=myimage
    RUN_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"
    fi
    echo "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.

    0 讨论(0)
  • 2021-01-31 15:33

    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.

    0 讨论(0)
  • 2021-01-31 15:42

    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: Alternatives If 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>
    
    0 讨论(0)
提交回复
热议问题