From 3e6a13ccb8ec1395d46925bc4c075cb32cf395a6 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Fri, 21 Jun 2019 13:51:59 +0200 Subject: [PATCH] LCOW: fix using wrong shell for healthchecks As reported in docker/compose#6445, when deploying a Linux container on Windows (LCOW), the daemon made the wrong assumption when deciding which shell to use to execute the healthcheck, looking at the host's platform instead of the container's platform. This patch adds a check for the container's platform when deploying on Windows, and sets the correct shell. Signed-off-by: Sebastiaan van Stijn --- daemon/health.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/daemon/health.go b/daemon/health.go index 12bb9ee7f4..847cdafd6a 100644 --- a/daemon/health.go +++ b/daemon/health.go @@ -10,7 +10,6 @@ import ( "time" "github.com/docker/docker/api/types" - containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" @@ -65,7 +64,7 @@ type cmdProbe struct { func (p *cmdProbe) run(ctx context.Context, d *Daemon, cntr *container.Container) (*types.HealthcheckResult, error) { cmdSlice := strslice.StrSlice(cntr.Config.Healthcheck.Test)[1:] if p.shell { - cmdSlice = append(getShell(cntr.Config), cmdSlice...) + cmdSlice = append(getShell(cntr), cmdSlice...) } entrypoint, args := d.getEntrypointAndArgs(strslice.StrSlice{}, cmdSlice) execConfig := exec.NewConfig() @@ -376,12 +375,15 @@ func min(x, y int) int { return y } -func getShell(config *containertypes.Config) []string { - if len(config.Shell) != 0 { - return config.Shell +func getShell(cntr *container.Container) []string { + if len(cntr.Config.Shell) != 0 { + return cntr.Config.Shell } if runtime.GOOS != "windows" { return []string{"/bin/sh", "-c"} } + if cntr.OS != runtime.GOOS { + return []string{"/bin/sh", "-c"} + } return []string{"cmd", "/S", "/C"} }