1
0
mirror of https://github.com/docker/cli.git synced 2026-01-13 18:22:35 +03:00

Wait to delete container when restoring on Windows

Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: dbdc8bbee4a26093e6342f93bb63a09fbe850f58
Component: engine
This commit is contained in:
Darren Stahl
2017-03-31 10:59:00 -07:00
parent 69889bcffd
commit 8cd4fe0243

View File

@@ -9,6 +9,7 @@ import (
"path/filepath"
"strings"
"syscall"
"time"
"golang.org/x/net/context"
@@ -567,10 +568,18 @@ func (clnt *client) Restore(containerID string, _ StdioCallback, unusedOnWindows
// We explicitly just log a warning if the terminate fails.
// Then we tell the backend the container exited.
if hc, err := hcsshim.OpenContainer(containerID); err == nil {
if err := hc.Terminate(); err != nil {
if !hcsshim.IsPending(err) {
logrus.Warnf("libcontainerd: failed to terminate %s on restore - %q", containerID, err)
}
const terminateTimeout = time.Minute * 2
err := hc.Terminate()
if hcsshim.IsPending(err) {
err = hc.WaitTimeout(terminateTimeout)
} else if hcsshim.IsAlreadyStopped(err) {
err = nil
}
if err != nil {
logrus.Warnf("libcontainerd: failed to terminate %s on restore - %q", containerID, err)
return err
}
}
return clnt.backend.StateChanged(containerID, StateInfo{