【发布时间】: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