Get proper exit code when running or starting a container.

When we finish running a container, we need to call wait in order
to get the exit code from the container.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
Daniel J Walsh 2020-05-21 10:48:39 -04:00
parent a852afab2f
commit f20694cc96
No known key found for this signature in database
GPG key ID: A2DF901DABE2C028
2 changed files with 18 additions and 3 deletions

View file

@ -360,10 +360,19 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
report := entities.ContainerStartReport{Id: name}
if options.Attach {
report.Err = startAndAttach(ic, name, &options.DetachKeys, options.Stdin, options.Stdout, options.Stderr)
if report.Err == nil {
exitCode, err := containers.Wait(ic.ClientCxt, name, nil)
if err == nil {
report.ExitCode = int(exitCode)
}
} else {
report.ExitCode = define.ExitCode(report.Err)
}
reports = append(reports, &report)
return reports, nil
}
report.Err = containers.Start(ic.ClientCxt, name, &options.DetachKeys)
report.ExitCode = define.ExitCode(report.Err)
reports = append(reports, &report)
}
return reports, nil
@ -385,11 +394,18 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
// Attach
if !opts.Detach {
err = startAndAttach(ic, con.ID, &opts.DetachKeys, opts.InputStream, opts.OutputStream, opts.ErrorStream)
if err == nil {
exitCode, err := containers.Wait(ic.ClientCxt, con.ID, nil)
if err == nil {
report.ExitCode = int(exitCode)
}
}
} else {
err = containers.Start(ic.ClientCxt, con.ID, nil)
}
report.ExitCode = define.ExitCode(err)
if err != nil {
report.ExitCode = define.ExitCode(err)
}
return &report, err
}

View file

@ -62,7 +62,6 @@ var _ = Describe("Podman run exit", func() {
})
It("podman run exit 50", func() {
Skip(v2remotefail)
result := podmanTest.Podman([]string{"run", ALPINE, "sh", "-c", "exit 50"})
result.WaitWithDefaultTimeout()
Expect(result.ExitCode()).To(Equal(50))