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 <github@gone.nl>
This commit is contained in:
parent
52c16677b2
commit
3e6a13ccb8
|
@ -10,7 +10,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"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/api/types/strslice"
|
||||||
"github.com/docker/docker/container"
|
"github.com/docker/docker/container"
|
||||||
"github.com/docker/docker/daemon/exec"
|
"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) {
|
func (p *cmdProbe) run(ctx context.Context, d *Daemon, cntr *container.Container) (*types.HealthcheckResult, error) {
|
||||||
cmdSlice := strslice.StrSlice(cntr.Config.Healthcheck.Test)[1:]
|
cmdSlice := strslice.StrSlice(cntr.Config.Healthcheck.Test)[1:]
|
||||||
if p.shell {
|
if p.shell {
|
||||||
cmdSlice = append(getShell(cntr.Config), cmdSlice...)
|
cmdSlice = append(getShell(cntr), cmdSlice...)
|
||||||
}
|
}
|
||||||
entrypoint, args := d.getEntrypointAndArgs(strslice.StrSlice{}, cmdSlice)
|
entrypoint, args := d.getEntrypointAndArgs(strslice.StrSlice{}, cmdSlice)
|
||||||
execConfig := exec.NewConfig()
|
execConfig := exec.NewConfig()
|
||||||
|
@ -376,12 +375,15 @@ func min(x, y int) int {
|
||||||
return y
|
return y
|
||||||
}
|
}
|
||||||
|
|
||||||
func getShell(config *containertypes.Config) []string {
|
func getShell(cntr *container.Container) []string {
|
||||||
if len(config.Shell) != 0 {
|
if len(cntr.Config.Shell) != 0 {
|
||||||
return config.Shell
|
return cntr.Config.Shell
|
||||||
}
|
}
|
||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
return []string{"/bin/sh", "-c"}
|
return []string{"/bin/sh", "-c"}
|
||||||
}
|
}
|
||||||
|
if cntr.OS != runtime.GOOS {
|
||||||
|
return []string{"/bin/sh", "-c"}
|
||||||
|
}
|
||||||
return []string{"cmd", "/S", "/C"}
|
return []string{"cmd", "/S", "/C"}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue