首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待码头集装箱移除

如何等待码头集装箱移除
EN

Stack Overflow用户
提问于 2019-08-23 18:55:28
回答 3查看 1.4K关注 0票数 2

我有一个任务,我运行在一个码头集装箱。我只希望它的一个实例运行,所以我命名容器。有时,我需要修改代码或配置,以便重新构建映像,然后停止并使用新映像重新启动容器。我一直在做一个docker stop,然后是一个docker run

最近,我尝试将这些合并为一个步骤:

代码语言:javascript
复制
docker stop myTask &&
    docker run --rm -d myTask myImage:$VERSION

但是,以下情况未能做到这一点:

docker:来自守护进程的错误响应:冲突。容器名称"/myTask“已经被容器/myTask使用了。您必须移除(或重命名)该容器才能重用该名称。

然后我尝试在其中添加一个docker wait

代码语言:javascript
复制
docker stop myTask &&
    (docker wait myTask || true) &&
    docker run --rm -d myTask myImage:$VERSION

我还是会有这种行为。docker wait似乎只等待容器停止,而不等待它被移除。然后,我尝试使用docker rm,认为一定要等到容器被移除后才返回:

代码语言:javascript
复制
docker stop myTask &&
    (docker rm myTask || true) &&
    docker run --rm -d myTask myImage:$VERSION

这仍然失败,因为“容器名称”"/myTask“已经在使用”错误“。

在没有指定名称的容器之前,我如何阻止?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-23 19:06:47

停止容器与移除容器不一样。在容器在服务器端删除操作(使用--rm启用)和docker run命令之间停止之后,您有一个争用条件。

您可以显式地删除容器,而不只是停止它:

代码语言:javascript
复制
docker rm -f myTask &&
  docker run --rm -d myTask myImage:$VERSION

或者您可以投票删除它:

代码语言:javascript
复制
docker stop myTask &&
    while docker container inspect myTask >/dev/null 2>&1; do sleep 1; done &&
    docker run --rm -d myTask myImage:$VERSION
票数 2
EN

Stack Overflow用户

发布于 2019-08-23 19:22:18

您可以使用以下命令:

代码语言:javascript
复制
docker rm -f myTask && docker run --rm -d --name myTask myImage:$VERSION
票数 0
EN

Stack Overflow用户

发布于 2020-03-12 15:56:10

与其等待删除,您还可以使用:

代码语言:javascript
复制
docker stop myTask && docker rename myTask myTaskStopped
docker run --rm -d myTask myImage:$VERSION

在没有名称冲突的情况下启动新容器时,将在后台删除已停止的容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57631654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档