docker restart容器失败:“已经在使用中”,但是没有更多的docker镜像

时间:2017-03-13 09:27:55

标签: list nginx docker containers

我首先得到了我的nginx docker图像:

docker pull nginx

然后我开始了:

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

然后我停了下来:

docker stop webserver

然后我尝试重启它:

$docker run -d -p 80:80 --name webserver nginx
docker: Error response from daemon: Conflict. The container name "/webserver" is already in use by container 036a0bcd196c5b23431dcd9876cac62082063bf62a492145dd8a55141f4dfd74. You have to remove (or rename) that container to be able to reuse that name..
See 'docker run --help'.

嗯,这是一个错误。但实际上现在容器列表中没有任何内容:

docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

为什么我重启nginx图片失败了?如何解决?

3 个答案:

答案 0 :(得分:61)

这是因为

  • 您已使用--name开关。
  • 容器已停止且未移除

你发现它已停止

docker ps -a

您可以使用以下命令启动它:

docker start webserver

编辑:替代方案 如果您希望每次都使用以下命令启动容器,

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

然后使用以下之一:

方法1:使用--rm开关,即容器一停止就会自动销毁

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

方法2:在启动您正在使用的命令之前停止容器后显式删除它。

docker stop <container name>
docker rm <container name>

答案 1 :(得分:5)

正如错误所说。

  

您必须删除(或重命名)该容器才能重用该名称

这给你两个选择。

  • 您可以使用命令

    删除使用名称“webserver”的容器

    docker rm 036a0bcd196c5b23431dcd9876cac62082063bf62a492145dd8a55141f4dfd74

并重试。

  • 或者您可以在运行命令期间使用其他名称。不建议这样做,因为您不再需要该docker。

最好删除不需要的泊坞窗并重复使用名称。

答案 2 :(得分:1)

虽然很好的答案是正确的,但它们实际上并没有解决我面临的问题。

方法:

安全地自动启动名为 的Docker容器,无论其之前的状态如何

解决方案是对docker run命令进行附加检查,然后基于runstop + run(有效地重新启动新映像)在结果上。

这实现了我的两个目标:

  • 避免错误
  • 允许我定期更新映像(例如新建版本)并安全地重新启动
#!/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"

现在,我可以以幂等的方式运行$NAME Docker容器(如果已经运行,则可以停止+开始),而不必担心这种可能的失败。