diff --git a/pkg/domain/infra/abi/containers.go b/pkg/domain/infra/abi/containers.go index 47fa65ef00..e7111dc5ba 100644 --- a/pkg/domain/infra/abi/containers.go +++ b/pkg/domain/infra/abi/containers.go @@ -958,6 +958,12 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri for i := range containers { ctr := containers[i] + removeContainer := func() { + if _, _, err := ic.removeContainer(ctx, ctr.Container, entities.RmOptions{}); err != nil { + logrus.Errorf("Removing container %s: %v", ctr.ID(), err) + } + } + if options.Attach { err = terminal.StartAttachCtr(ctx, ctr.Container, options.Stdout, options.Stderr, options.Stdin, options.DetachKeys, options.SigProxy, true) if errors.Is(err, define.ErrDetach) { @@ -991,9 +997,7 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri ExitCode: exitCode, }) if ctr.AutoRemove() { - if _, _, err := ic.removeContainer(ctx, ctr.Container, entities.RmOptions{}); err != nil { - logrus.Errorf("Removing container %s: %v", ctr.ID(), err) - } + removeContainer() } return reports, fmt.Errorf("unable to start container %s: %w", ctr.ID(), err) } @@ -1002,6 +1006,9 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri if err2 != nil { logrus.Errorf("Waiting for container %s: %v", ctr.ID(), err2) } + if ctr.AutoRemove() && !ctr.ShouldRestart(ctx) { + removeContainer() + } reports = append(reports, &entities.ContainerStartReport{ Id: ctr.ID(), RawInput: ctr.rawInput, @@ -1038,9 +1045,7 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri } report.Err = fmt.Errorf("unable to start container %q: %w", ctr.ID(), err) if ctr.AutoRemove() { - if _, _, err := ic.removeContainer(ctx, ctr.Container, entities.RmOptions{}); err != nil { - logrus.Errorf("Removing container %s: %v", ctr.ID(), err) - } + removeContainer() } reports = append(reports, report) continue diff --git a/pkg/domain/infra/tunnel/containers.go b/pkg/domain/infra/tunnel/containers.go index 99a9c6510a..75b5d405b3 100644 --- a/pkg/domain/infra/tunnel/containers.go +++ b/pkg/domain/infra/tunnel/containers.go @@ -806,7 +806,6 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri logrus.Errorf("Failed to check if %s should restart: %v", ctr.ID, err) return } - logrus.Errorf("Should restart: %v", shouldRestart) if !shouldRestart && ctr.AutoRemove { removeContainer(ctr.ID, ctr.CIDFile) diff --git a/test/system/045-start.bats b/test/system/045-start.bats index 5774438615..62fd124fb5 100644 --- a/test/system/045-start.bats +++ b/test/system/045-start.bats @@ -149,4 +149,18 @@ load helpers run_podman rm -t 0 -f $ctrID $cname } +# Regression test for https://github.com/containers/podman/issues/25965 +# bats test_tags=ci:parallel +@test "podman start attach with created --rm container" { + local msg=c-$(safename) + run_podman create --rm $IMAGE echo "$msg" + cid="$output" + + run_podman start -a $cid + assert "$output" == "$msg" "attach printed the expected output" + + # container must be removed on its own as it was created with --rm + run_podman 1 container exists $cid +} + # vim: filetype=sh