Skip to content

Commit

Permalink
LCOW: fix using wrong shell for healthchecks
Browse files Browse the repository at this point in the history
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 <github@gone.nl>
  • Loading branch information
thaJeztah committed Jun 21, 2019
1 parent 52c1667 commit 3e6a13c
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions daemon/health.go
Expand Up @@ -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"
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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"}
}

0 comments on commit 3e6a13c

Please sign in to comment.