فهرست منبع

Merge pull request #25178 from crosbymichael/bump-restore

Check if the container is running if no event
Tibor Vass 9 سال پیش
والد
کامیت
cd22bb863c
1فایلهای تغییر یافته به همراه13 افزوده شده و 5 حذف شده
  1. 13 5
      libcontainerd/client_linux.go

+ 13 - 5
libcontainerd/client_linux.go

@@ -505,12 +505,20 @@ func (clnt *client) Restore(containerID string, options ...CreateOption) error {
 			return err
 			return err
 		}
 		}
 
 
-		// If ev is nil, then we already consumed all the event of the
-		// container, included the "exit" one.
-		// Thus we return to avoid overriding the Exit Code.
 		if ev == nil {
 		if ev == nil {
-			logrus.Warnf("libcontainerd: restore was called on a fully synced container (%s)", containerID)
-			return nil
+			if _, err := clnt.getContainer(containerID); err == nil {
+				// If ev is nil and the container is running in containerd,
+				// we already consumed all the event of the
+				// container, included the "exit" one.
+				// Thus we return to avoid overriding the Exit Code.
+				logrus.Warnf("libcontainerd: restore was called on a fully synced container (%s)", containerID)
+				return nil
+			}
+			// the container is not running so we need to fix the state within docker
+			ev = &containerd.Event{
+				Type:   StateExit,
+				Status: 1,
+			}
 		}
 		}
 
 
 		// get the exit status for this container
 		// get the exit status for this container