fix: list containers if some of them concurrently removed, fixes #33

This commit is contained in:
Pavel Sviderski
2025-03-18 15:39:15 +10:00
parent a0a66f34c4
commit e8715fce38
+7 -3
View File
@@ -149,13 +149,17 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, err.Error()) return nil, status.Errorf(codes.Internal, err.Error())
} }
containers := make([]types.ContainerJSON, len(containerSummaries)) containers := make([]types.ContainerJSON, 0, len(containerSummaries))
for i, cs := range containerSummaries { for _, cs := range containerSummaries {
c, err := s.client.ContainerInspect(ctx, cs.ID) c, err := s.client.ContainerInspect(ctx, cs.ID)
if err != nil { if err != nil {
if client.IsErrNotFound(err) {
// The listed container may have been removed while we were inspecting other containers.
continue
}
return nil, status.Errorf(codes.Internal, "inspect container %s: %v", cs.ID, err) return nil, status.Errorf(codes.Internal, "inspect container %s: %v", cs.ID, err)
} }
containers[i] = c containers = append(containers, c)
} }
containersBytes, err := json.Marshal(containers) containersBytes, err := json.Marshal(containers)