我首先得到了我的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图片失败了?如何解决?
答案 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
并重试。
最好删除不需要的泊坞窗并重复使用名称。
答案 2 :(得分:1)
虽然很好的答案是正确的,但它们实际上并没有解决我面临的问题。
解决方案是对docker run
命令进行附加检查,然后基于run
或stop
+ 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容器(如果已经运行,则可以停止+开始),而不必担心这种可能的失败。