From 857f5856f82691030b1085b7813bfd8add21716c Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Fri, 16 Oct 2020 22:40:02 -0700 Subject: [PATCH] handle sigterm on running a plugin While running a plugin and canceling with SIGTERM, main process will close right away without letting the plugin close itself down and handle the exit code properly. Add appcontext that is useful for handling sigterm, as well as supporting sigkill when things go wrong. Signed-off-by: Tonis Tiigi --- cmd/docker/docker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/docker/docker.go b/cmd/docker/docker.go index ff0fdf83ba..c6805f4b7f 100644 --- a/cmd/docker/docker.go +++ b/cmd/docker/docker.go @@ -15,6 +15,7 @@ import ( "github.com/docker/cli/cli/version" "github.com/docker/docker/api/types/versions" "github.com/docker/docker/client" + "github.com/moby/buildkit/util/appcontext" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -198,6 +199,11 @@ func tryPluginRun(dockerCli command.Cli, cmd *cobra.Command, subcommand string) return err } + go func() { + // override SIGTERM handler so we let the plugin shut down first + <-appcontext.Context().Done() + }() + if err := plugincmd.Run(); err != nil { statusCode := 1 exitErr, ok := err.(*exec.ExitError)