diff --git a/daemon/kill.go b/daemon/kill.go index c7c240257a..a68383a2ad 100644 --- a/daemon/kill.go +++ b/daemon/kill.go @@ -147,7 +147,12 @@ func (daemon *Daemon) Kill(container *containerpkg.Container) error { } } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + waitTimeout := 10 * time.Second + if runtime.GOOS == "windows" { + waitTimeout = 75 * time.Second // runhcs can be sloooooow. + } + + ctx, cancel := context.WithTimeout(context.Background(), waitTimeout) defer cancel() status := <-container.Wait(ctx, containerpkg.WaitConditionNotRunning) @@ -155,7 +160,7 @@ func (daemon *Daemon) Kill(container *containerpkg.Container) error { return nil } - logrus.WithError(status.Err()).WithField("container", container.ID).Error("Container failed to exit within 10 seconds of kill - trying direct SIGKILL") + logrus.WithError(status.Err()).WithField("container", container.ID).Errorf("Container failed to exit within %v of kill - trying direct SIGKILL", waitTimeout) if err := killProcessDirectly(container); err != nil { if errors.As(err, &errNoSuchProcess{}) { diff --git a/integration/container/wait_test.go b/integration/container/wait_test.go index 369edaf651..cfe5bd3da8 100644 --- a/integration/container/wait_test.go +++ b/integration/container/wait_test.go @@ -145,7 +145,7 @@ func TestWaitConditions(t *testing.T) { opts = append(opts, container.WithAutoRemove) } containerID := container.Run(ctx, t, cli, opts...) - poll.WaitOn(t, container.IsInState(ctx, cli, containerID, "running"), poll.WithTimeout(30*time.Second), poll.WithDelay(100*time.Millisecond)) + poll.WaitOn(t, container.IsInState(ctx, cli, containerID, "running"), poll.WithTimeout(75*time.Second), poll.WithDelay(100*time.Millisecond)) waitResC, errC := cli.ContainerWait(ctx, containerID, tc.waitCond) select {