diff --git a/pkg/specgen/generate/container_create.go b/pkg/specgen/generate/container_create.go index 266c4c5883..3b0b6c5f6c 100644 --- a/pkg/specgen/generate/container_create.go +++ b/pkg/specgen/generate/container_create.go @@ -560,7 +560,7 @@ func createContainerOptions(rt *libpod.Runtime, s *specgen.SpecGenerator, pod *l retries uint ) // If the container is running in a pod, use the pod's restart policy for all the containers - if pod != nil { + if pod != nil && !s.IsInitContainer() { podConfig := pod.ConfigNoCopy() if podConfig.RestartRetries != nil { retries = *podConfig.RestartRetries diff --git a/pkg/specgen/specgen.go b/pkg/specgen/specgen.go index ff91489dbf..52ddf3d396 100644 --- a/pkg/specgen/specgen.go +++ b/pkg/specgen/specgen.go @@ -586,6 +586,10 @@ func (s *SpecGenerator) GetImage() (*libimage.Image, string) { return s.image, s.resolvedImageName } +func (s *SpecGenerator) IsInitContainer() bool { + return len(s.InitContainerType) != 0 +} + type Secret struct { Source string Target string diff --git a/test/e2e/play_kube_test.go b/test/e2e/play_kube_test.go index 99210783c6..0f724fe628 100644 --- a/test/e2e/play_kube_test.go +++ b/test/e2e/play_kube_test.go @@ -2234,6 +2234,12 @@ var _ = Describe("Podman play kube", func() { Expect(inspect).Should(Exit(0)) Expect(inspect.OutputToString()).To(ContainSubstring("running")) + // Init containers should not be restarted + inspect = podmanTest.Podman([]string{"inspect", "--format", "{{ .HostConfig.RestartPolicy.Name }}", "testPod-" + defaultCtrName}) + inspect.WaitWithDefaultTimeout() + Expect(inspect).Should(Exit(0)) + Expect(inspect.OutputToString()).To(ContainSubstring(define.RestartPolicyNo)) + // Init containers need environment too! #18384 logs := podmanTest.Podman([]string{"logs", "testPod-init-test"}) logs.WaitWithDefaultTimeout()