Skip to content
This repository was archived by the owner on Oct 13, 2023. It is now read-only.

Commit 6e21b66

Browse files
Merge component 'engine' from git@github.com:docker/engine 18.09
2 parents 15819d7 + f01d171 commit 6e21b66

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

components/engine/daemon/kill.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ func (daemon *Daemon) killWithSignal(container *containerpkg.Container, sig int)
6464
container.Lock()
6565
defer container.Unlock()
6666

67-
daemon.stopHealthchecks(container)
68-
6967
if !container.Running {
7068
return errNotRunning(container.ID)
7169
}

components/engine/integration/container/health_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
containertypes "github.com/docker/docker/api/types/container"
1010
"github.com/docker/docker/client"
1111
"github.com/docker/docker/integration/internal/container"
12+
"gotest.tools/assert"
1213
"gotest.tools/poll"
1314
"gotest.tools/skip"
1415
)
@@ -32,6 +33,35 @@ func TestHealthCheckWorkdir(t *testing.T) {
3233
poll.WaitOn(t, pollForHealthStatus(ctx, client, cID, types.Healthy), poll.WithDelay(100*time.Millisecond))
3334
}
3435

36+
// GitHub #37263
37+
// Do not stop healthchecks just because we sent a signal to the container
38+
func TestHealthKillContainer(t *testing.T) {
39+
skip.If(t, testEnv.OSType == "windows", "Windows only supports SIGKILL and SIGTERM? See https://github.com/moby/moby/issues/39574")
40+
defer setupTest(t)()
41+
42+
ctx := context.Background()
43+
client := testEnv.APIClient()
44+
45+
id := container.Run(t, ctx, client, func(c *container.TestContainerConfig) {
46+
c.Config.Healthcheck = &containertypes.HealthConfig{
47+
Test: []string{"CMD-SHELL", "sleep 1"},
48+
Interval: time.Second,
49+
Retries: 5,
50+
}
51+
})
52+
53+
ctxPoll, cancel := context.WithTimeout(ctx, 30*time.Second)
54+
defer cancel()
55+
poll.WaitOn(t, pollForHealthStatus(ctxPoll, client, id, "healthy"), poll.WithDelay(100*time.Millisecond))
56+
57+
err := client.ContainerKill(ctx, id, "SIGUSR1")
58+
assert.NilError(t, err)
59+
60+
ctxPoll, cancel = context.WithTimeout(ctx, 30*time.Second)
61+
defer cancel()
62+
poll.WaitOn(t, pollForHealthStatus(ctxPoll, client, id, "healthy"), poll.WithDelay(100*time.Millisecond))
63+
}
64+
3565
func pollForHealthStatus(ctx context.Context, client client.APIClient, containerID string, healthStatus string) func(log poll.LogT) poll.Result {
3666
return func(log poll.LogT) poll.Result {
3767
inspect, err := client.ContainerInspect(ctx, containerID)

0 commit comments

Comments
 (0)