【问题标题】:Docker rm returning ContainerNotFoundException after successfully removing container成功删除容器后 Docker rm 返回 ContainerNotFoundException
【发布时间】:2021-09-29 09:21:22
【问题描述】:

我正在使用与 DockerEngine (Docker.DotNet) 对话的 C# API 来做一些事情,但值得注意的是,在这种情况下,删除了一个停止的容器。这是我的代码:

foreach (var container in RunningContainers)
{
    if (container.State == "dead" || container.State == "exited")
    {
        long exitType = Client.Containers.InspectContainerAsync(container.ID).Result.State.ExitCode;

        if (exitType != 0)
        {
            badExitCodeCount++;
        }
        Client.Containers.RemoveContainerAsync(container.ID, new ContainerRemoveParameters()).Wait();
    }
}

请注意,在这种情况下,RunningContainers 仍然包含已停止的容器,并且尚未刷新其状态。

这是错误。执行RemoveContainerAsync 后,API 成功调用 DockerEngine,容器从我的本地 Docker 容器中删除。然后在代码继续运行后不久,收到 Docker “No such container”响应,抛出异常。

对这里发生的事情有什么想法吗?

【问题讨论】:

  • 代码中哪一行抛出异常?
  • @ChetanRanpariya 抱歉,RemoveContainerAsync 调用。
  • 为什么要以同步方式使用 DockerEngine 的 async API?
  • @PeterCsala 此代码位于服务器刻度内
  • @zkatancik 我相信你仍然可以使用async void 来使用await (Reference)

标签: c# docker rm docker-api docker-engine


【解决方案1】:

问题在于同时运行该方法的多个线程,我错过了棘手的竞争条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多