Fixed healthcheck default values when container created via compat API

Fixes #11225

Signed-off-by: Milivoje Legenovic <m.legenovic@gmail.com>
This commit is contained in:
Milivoje Legenovic
2021-08-14 13:10:28 +02:00
parent 94886d4aba
commit 257d5e8a73
2 changed files with 72 additions and 49 deletions

View File

@ -356,51 +356,55 @@ func ContainerCreateToContainerCLIOpts(cc handlers.CreateContainerConfig, rtc *c
CPUSetMems: cc.HostConfig.CpusetMems, CPUSetMems: cc.HostConfig.CpusetMems,
// Detach: false, // don't need // Detach: false, // don't need
// DetachKeys: "", // don't need // DetachKeys: "", // don't need
Devices: devices, Devices: devices,
DeviceCGroupRule: nil, DeviceCGroupRule: nil,
DeviceReadBPs: readBps, DeviceReadBPs: readBps,
DeviceReadIOPs: readIops, DeviceReadIOPs: readIops,
DeviceWriteBPs: writeBps, DeviceWriteBPs: writeBps,
DeviceWriteIOPs: writeIops, DeviceWriteIOPs: writeIops,
Entrypoint: entrypoint, Entrypoint: entrypoint,
Env: cc.Config.Env, Env: cc.Config.Env,
Expose: expose, Expose: expose,
GroupAdd: cc.HostConfig.GroupAdd, GroupAdd: cc.HostConfig.GroupAdd,
Hostname: cc.Config.Hostname, Hostname: cc.Config.Hostname,
ImageVolume: "bind", ImageVolume: "bind",
Init: init, Init: init,
Interactive: cc.Config.OpenStdin, Interactive: cc.Config.OpenStdin,
IPC: string(cc.HostConfig.IpcMode), IPC: string(cc.HostConfig.IpcMode),
Label: stringMaptoArray(cc.Config.Labels), Label: stringMaptoArray(cc.Config.Labels),
LogDriver: cc.HostConfig.LogConfig.Type, LogDriver: cc.HostConfig.LogConfig.Type,
LogOptions: stringMaptoArray(cc.HostConfig.LogConfig.Config), LogOptions: stringMaptoArray(cc.HostConfig.LogConfig.Config),
Name: cc.Name, Name: cc.Name,
OOMScoreAdj: cc.HostConfig.OomScoreAdj, OOMScoreAdj: cc.HostConfig.OomScoreAdj,
Arch: "", Arch: "",
OS: "", OS: "",
Variant: "", Variant: "",
PID: string(cc.HostConfig.PidMode), PID: string(cc.HostConfig.PidMode),
PIDsLimit: cc.HostConfig.PidsLimit, PIDsLimit: cc.HostConfig.PidsLimit,
Privileged: cc.HostConfig.Privileged, Privileged: cc.HostConfig.Privileged,
PublishAll: cc.HostConfig.PublishAllPorts, PublishAll: cc.HostConfig.PublishAllPorts,
Quiet: false, Quiet: false,
ReadOnly: cc.HostConfig.ReadonlyRootfs, ReadOnly: cc.HostConfig.ReadonlyRootfs,
ReadOnlyTmpFS: true, // podman default ReadOnlyTmpFS: true, // podman default
Rm: cc.HostConfig.AutoRemove, Rm: cc.HostConfig.AutoRemove,
SecurityOpt: cc.HostConfig.SecurityOpt, SecurityOpt: cc.HostConfig.SecurityOpt,
StopSignal: cc.Config.StopSignal, StopSignal: cc.Config.StopSignal,
StorageOpt: stringMaptoArray(cc.HostConfig.StorageOpt), StorageOpt: stringMaptoArray(cc.HostConfig.StorageOpt),
Sysctl: stringMaptoArray(cc.HostConfig.Sysctls), Sysctl: stringMaptoArray(cc.HostConfig.Sysctls),
Systemd: "true", // podman default Systemd: "true", // podman default
TmpFS: parsedTmp, TmpFS: parsedTmp,
TTY: cc.Config.Tty, TTY: cc.Config.Tty,
User: cc.Config.User, User: cc.Config.User,
UserNS: string(cc.HostConfig.UsernsMode), UserNS: string(cc.HostConfig.UsernsMode),
UTS: string(cc.HostConfig.UTSMode), UTS: string(cc.HostConfig.UTSMode),
Mount: mounts, Mount: mounts,
VolumesFrom: cc.HostConfig.VolumesFrom, VolumesFrom: cc.HostConfig.VolumesFrom,
Workdir: cc.Config.WorkingDir, Workdir: cc.Config.WorkingDir,
Net: &netInfo, Net: &netInfo,
HealthInterval: DefaultHealthCheckInterval,
HealthRetries: DefaultHealthCheckRetries,
HealthTimeout: DefaultHealthCheckTimeout,
HealthStartPeriod: DefaultHealthCheckStartPeriod,
} }
if !rootless.IsRootless() { if !rootless.IsRootless() {
var ulimits []string var ulimits []string
@ -527,10 +531,18 @@ func ContainerCreateToContainerCLIOpts(cc handlers.CreateContainerConfig, rtc *c
finCmd = finCmd[:len(finCmd)-1] finCmd = finCmd[:len(finCmd)-1]
} }
cliOpts.HealthCmd = finCmd cliOpts.HealthCmd = finCmd
cliOpts.HealthInterval = cc.Config.Healthcheck.Interval.String() if cc.Config.Healthcheck.Interval > 0 {
cliOpts.HealthRetries = uint(cc.Config.Healthcheck.Retries) cliOpts.HealthInterval = cc.Config.Healthcheck.Interval.String()
cliOpts.HealthStartPeriod = cc.Config.Healthcheck.StartPeriod.String() }
cliOpts.HealthTimeout = cc.Config.Healthcheck.Timeout.String() if cc.Config.Healthcheck.Retries > 0 {
cliOpts.HealthRetries = uint(cc.Config.Healthcheck.Retries)
}
if cc.Config.Healthcheck.StartPeriod > 0 {
cliOpts.HealthStartPeriod = cc.Config.Healthcheck.StartPeriod.String()
}
if cc.Config.Healthcheck.Timeout > 0 {
cliOpts.HealthTimeout = cc.Config.Healthcheck.Timeout.String()
}
} }
// specgen assumes the image name is arg[0] // specgen assumes the image name is arg[0]

View File

@ -356,3 +356,14 @@ t GET containers/$cid/json 200 \
.HostConfig.NetworkMode="bridge" .HostConfig.NetworkMode="bridge"
t DELETE containers/$cid?v=true 204 t DELETE containers/$cid?v=true 204
# Test Compat Create with healthcheck, check default values
t POST containers/create Image=$IMAGE Cmd='["top"]' Healthcheck='{"Test":["true"]}' 201 \
.Id~[0-9a-f]\\{64\\}
cid=$(jq -r '.Id' <<<"$output")
t GET containers/$cid/json 200 \
.Config.Healthcheck.Interval=30000000000 \
.Config.Healthcheck.Timeout=30000000000 \
.Config.Healthcheck.Retries=3
t DELETE containers/$cid?v=true 204