0

我正在使用与 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仍包括已停止的容器,并且尚未刷新其状态。

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

关于这里发生了什么的任何想法?

4

1 回答 1

0

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

于 2021-07-23T01:39:46.060 回答