diff --git a/oci/oci.go b/oci/oci.go index 96cbc909..b407c827 100644 --- a/oci/oci.go +++ b/oci/oci.go @@ -486,6 +486,9 @@ func (r *Runtime) UpdateStatus(c *Container) error { defer c.opLock.Unlock() out, err := exec.Command(r.Path(c), "state", c.name).CombinedOutput() if err != nil { + if strings.Contains(string(out), "does not exist") { + return nil + } return fmt.Errorf("error getting container state for %s: %s: %q", c.name, err, out) } if err := json.NewDecoder(bytes.NewBuffer(out)).Decode(&c.state); err != nil { diff --git a/server/container_list.go b/server/container_list.go index 9e372a5f..908145f2 100644 --- a/server/container_list.go +++ b/server/container_list.go @@ -66,9 +66,7 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque } for _, ctr := range ctrList { - if err := s.runtime.UpdateStatus(ctr); err != nil { - return nil, err - } + s.runtime.UpdateStatus(ctr) podSandboxID := ctr.Sandbox() cState := s.runtime.ContainerStatus(ctr) diff --git a/server/container_status.go b/server/container_status.go index 1879e244..f28d21b2 100644 --- a/server/container_status.go +++ b/server/container_status.go @@ -20,6 +20,7 @@ func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusReq // best effort if container is still in runc store... s.runtime.UpdateStatus(c) + s.containerStateToDisk(c) containerID := c.ID() image := c.Image() diff --git a/server/sandbox_list.go b/server/sandbox_list.go index 9e4b3562..447db7ca 100644 --- a/server/sandbox_list.go +++ b/server/sandbox_list.go @@ -59,9 +59,8 @@ func (s *Server) ListPodSandbox(ctx context.Context, req *pb.ListPodSandboxReque // it's better not to panic continue } - if err := s.runtime.UpdateStatus(podInfraContainer); err != nil { - return nil, err - } + s.runtime.UpdateStatus(podInfraContainer) + cState := s.runtime.ContainerStatus(podInfraContainer) created := cState.Created.UnixNano() rStatus := pb.PodSandboxState_SANDBOX_NOTREADY diff --git a/server/sandbox_status.go b/server/sandbox_status.go index e2d0286c..65e51a84 100644 --- a/server/sandbox_status.go +++ b/server/sandbox_status.go @@ -18,6 +18,7 @@ func (s *Server) PodSandboxStatus(ctx context.Context, req *pb.PodSandboxStatusR podInfraContainer := sb.infraContainer // best effort if container is still in runc store... s.runtime.UpdateStatus(podInfraContainer) + s.containerStateToDisk(podInfraContainer) cState := s.runtime.ContainerStatus(podInfraContainer) @@ -32,6 +33,7 @@ func (s *Server) PodSandboxStatus(ctx context.Context, req *pb.PodSandboxStatusR } rStatus := pb.PodSandboxState_SANDBOX_NOTREADY + if cState.Status == oci.ContainerStateRunning { rStatus = pb.PodSandboxState_SANDBOX_READY }