create: ignore check if image has HEALTHCHECK NONE

If the image was built with "HEALTHCHECK NONE" then we should create a
container without healthcheck configuration. Otherwise executing the
healthcheck on the container will return "unhealthy" instead of the
correct error message that the container doesn't have a healthcheck.

We also ignore the healthcheck configuration if the command list is
empty or the command string is empty.

Fixes #3525

Signed-off-by: Stefan Becker <chemobejk@gmail.com>
This commit is contained in:
Stefan Becker 2019-07-10 08:40:58 +03:00
parent 33001a9028
commit 5caf218b11

View file

@ -117,20 +117,26 @@ func CreateContainer(ctx context.Context, c *GenericCLIResults, runtime *libpod.
}
if healthCheck != nil {
// apply defaults if image doesn't override them
if healthCheck.Interval == 0 {
healthCheck.Interval = 30 * time.Second
}
if healthCheck.Timeout == 0 {
healthCheck.Timeout = 30 * time.Second
}
/* Docker default is 0s, so the following would be a no-op
if healthCheck.StartPeriod == 0 {
healthCheck.StartPeriod = 0 * time.Second
}
*/
if healthCheck.Retries == 0 {
healthCheck.Retries = 3
hcCommand := healthCheck.Test
if len(hcCommand) < 1 || hcCommand[0] == "" || hcCommand[0] == "NONE" {
// disable health check
healthCheck = nil
} else {
// apply defaults if image doesn't override them
if healthCheck.Interval == 0 {
healthCheck.Interval = 30 * time.Second
}
if healthCheck.Timeout == 0 {
healthCheck.Timeout = 30 * time.Second
}
/* Docker default is 0s, so the following would be a no-op
if healthCheck.StartPeriod == 0 {
healthCheck.StartPeriod = 0 * time.Second
}
*/
if healthCheck.Retries == 0 {
healthCheck.Retries = 3
}
}
}
}