!3 docker: Delete stale containerd object on start failure
Merge pull request !3 from Grooooot/master
This commit is contained in:
commit
0777be28b5
@ -1 +1 @@
|
|||||||
18.09.0.100
|
18.09.0.102
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
Name: docker-engine
|
Name: docker-engine
|
||||||
Version: 18.09.0
|
Version: 18.09.0
|
||||||
Release: 101
|
Release: 102
|
||||||
Summary: The open-source application container engine
|
Summary: The open-source application container engine
|
||||||
Group: Tools/Docker
|
Group: Tools/Docker
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,56 @@
|
|||||||
|
From 6fe2bd73981651b275e508dd2c4806b20853684b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Grooooot <isula@huawei.com>
|
||||||
|
Date: Tue, 17 Mar 2020 10:34:59 +0800
|
||||||
|
Subject: [PATCH] docker: Delete stale containerd object on start failure
|
||||||
|
|
||||||
|
containerd has two objects with regard to containers.
|
||||||
|
This is a "container" object which is metadata and a "task" which is
|
||||||
|
manging the actual runtime state.
|
||||||
|
|
||||||
|
When docker starts a container, it creates both the container metadata
|
||||||
|
and the task at the same time. So when a container exists, docker deletes
|
||||||
|
both of these objects as well.
|
||||||
|
|
||||||
|
This ensures that if, on start, when we go to create the container metadata object
|
||||||
|
in containerd, if there is an error due to a name conflict taht we go
|
||||||
|
ahead and clean that up and try again.
|
||||||
|
|
||||||
|
backport from upstream: https://github.com/moby/moby/pull/38364
|
||||||
|
|
||||||
|
Signed-off-by: Grooooot <isula@huawei.com>
|
||||||
|
---
|
||||||
|
components/engine/daemon/start.go | 17 +++++++++++++++--
|
||||||
|
1 file changed, 15 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/components/engine/daemon/start.go b/components/engine/daemon/start.go
|
||||||
|
index 8ff636b..07bffaa 100644
|
||||||
|
--- a/components/engine/daemon/start.go
|
||||||
|
+++ b/components/engine/daemon/start.go
|
||||||
|
@@ -185,9 +185,22 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = daemon.containerd.Create(context.Background(), container.ID, spec, createOptions)
|
||||||
|
+ ctx := context.TODO()
|
||||||
|
+
|
||||||
|
+ err = daemon.containerd.Create(ctx, container.ID, spec, createOptions)
|
||||||
|
if err != nil {
|
||||||
|
- return translateContainerdStartErr(container.Path, container.SetExitCode, err)
|
||||||
|
+ if errdefs.IsConflict(err) {
|
||||||
|
+ logrus.WithError(err).WithField("container", container.ID).Error("Container not cleaned up from containerd from previous run")
|
||||||
|
+ // best effort to clean up old container object
|
||||||
|
+ daemon.containerd.DeleteTask(ctx, container.ID)
|
||||||
|
+ if err := daemon.containerd.Delete(ctx, container.ID); err != nil && !errdefs.IsNotFound(err) {
|
||||||
|
+ logrus.WithError(err).WithField("container", container.ID).Error("Error cleaning up stale containerd container object")
|
||||||
|
+ }
|
||||||
|
+ err = daemon.containerd.Create(ctx, container.ID, spec, createOptions)
|
||||||
|
+ }
|
||||||
|
+ if err != nil {
|
||||||
|
+ return translateContainerdStartErr(container.Path, container.SetExitCode, err)
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(mlaventure): we need to specify checkpoint options here
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -156,3 +156,4 @@ patch/0157-docker-Support-check-manifest-and-layer-s-DiffID-inf.patch
|
|||||||
patch/0158-docker-support-private-registry.patch
|
patch/0158-docker-support-private-registry.patch
|
||||||
patch/0159-docker-extend-timeout-in-cli-testcases.patch
|
patch/0159-docker-extend-timeout-in-cli-testcases.patch
|
||||||
patch/0160-docker-create-a-soft-link-from-runtime-default-to-ru.patch
|
patch/0160-docker-create-a-soft-link-from-runtime-default-to-ru.patch
|
||||||
|
patch/0161-docker-Delete-stale-containerd-object-on-start-f.patch
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user