我有一个任务,我运行在一个码头集装箱。我只希望它的一个实例运行,所以我命名容器。有时,我需要修改代码或配置,以便重新构建映像,然后停止并使用新映像重新启动容器。我一直在做一个docker stop,然后是一个docker run。
最近,我尝试将这些合并为一个步骤:
docker stop myTask &&
docker run --rm -d myTask myImage:$VERSION但是,以下情况未能做到这一点:
docker:来自守护进程的错误响应:冲突。容器名称"/myTask“已经被容器/myTask使用了。您必须移除(或重命名)该容器才能重用该名称。
然后我尝试在其中添加一个docker wait:
docker stop myTask &&
(docker wait myTask || true) &&
docker run --rm -d myTask myImage:$VERSION我还是会有这种行为。docker wait似乎只等待容器停止,而不等待它被移除。然后,我尝试使用docker rm,认为一定要等到容器被移除后才返回:
docker stop myTask &&
(docker rm myTask || true) &&
docker run --rm -d myTask myImage:$VERSION这仍然失败,因为“容器名称”"/myTask“已经在使用”错误“。
在没有指定名称的容器之前,我如何阻止?
发布于 2019-08-23 19:06:47
停止容器与移除容器不一样。在容器在服务器端删除操作(使用--rm启用)和docker run命令之间停止之后,您有一个争用条件。
您可以显式地删除容器,而不只是停止它:
docker rm -f myTask &&
docker run --rm -d myTask myImage:$VERSION或者您可以投票删除它:
docker stop myTask &&
while docker container inspect myTask >/dev/null 2>&1; do sleep 1; done &&
docker run --rm -d myTask myImage:$VERSION发布于 2019-08-23 19:22:18
您可以使用以下命令:
docker rm -f myTask && docker run --rm -d --name myTask myImage:$VERSION发布于 2020-03-12 15:56:10
与其等待删除,您还可以使用:
docker stop myTask && docker rename myTask myTaskStopped
docker run --rm -d myTask myImage:$VERSION在没有名称冲突的情况下启动新容器时,将在后台删除已停止的容器。
https://stackoverflow.com/questions/57631654
复制相似问题