From 4ea4a66b4b35ef7db99f799a8e40467ff29d7f62 Mon Sep 17 00:00:00 2001 From: KoaLaYT Date: Thu, 25 Apr 2024 23:19:19 +0800 Subject: [PATCH] fix(engine): kill docker when timeout --- internal/engine/docker.go | 13 ------------- internal/engine/exec.go | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/engine/docker.go b/internal/engine/docker.go index 80f94ed..32ffaa9 100644 --- a/internal/engine/docker.go +++ b/internal/engine/docker.go @@ -208,19 +208,6 @@ func (e *Docker) exec(box *config.Box, step *config.Step, req Request, dir strin } if err.Error() == "signal: killed" { - if step.Action == actionRun { - // we have to "docker kill" the container here, because the process - // inside the container is not related to the "docker run" process, - // and will hang forever after the "docker run" process is killed - go func() { - err = dockerKill(req.ID) - if err == nil { - logx.Debug("%s: docker kill ok", req.ID) - } else { - logx.Log("%s: docker kill failed: %v", req.ID, err) - } - }() - } // context timeout err = ErrTimeout return diff --git a/internal/engine/exec.go b/internal/engine/exec.go index 7068c7d..fb96ed5 100644 --- a/internal/engine/exec.go +++ b/internal/engine/exec.go @@ -41,6 +41,19 @@ func (p *Program) RunStdin(stdin io.Reader, id, name string, arg ...string) (std cmd.Cancel = func() error { err := cmd.Process.Kill() logx.Debug("%s: execution timeout, killed process=%d, err=%v", id, cmd.Process.Pid, err) + if arg[0] == actionRun { + // we have to "docker kill" the container here, because the process + // inside the container is not related to the "docker run" process, + // and will hang forever after the "docker run" process is killed + go func() { + err = dockerKill(id) + if err == nil { + logx.Debug("%s: docker kill ok", id) + } else { + logx.Log("%s: docker kill failed: %v", id, err) + } + }() + } return err }