mirror of https://github.com/containers/podman.git
Merge pull request #23646 from Luap99/wait-remove
podman wait: allow waiting for removal of containers
This commit is contained in:
commit
98d52b6131
|
@ -21,8 +21,9 @@ such as those created by `podman kube play`, the containers may be repeatedly
|
|||
exiting and restarting, possibly with different exit codes. `podman wait` will
|
||||
only display and detect the first exit after the wait command was started.
|
||||
|
||||
When running a container with podman run --rm wait should wait for the
|
||||
container to be fully removed as well before it returns.
|
||||
When running a container with podman run --rm wait does not wait for the
|
||||
container to be fully removed. To wait for the removal of a container use
|
||||
`--condition=removing`.
|
||||
|
||||
## OPTIONS
|
||||
|
||||
|
|
|
@ -546,10 +546,7 @@ func (c *Container) WaitForExit(ctx context.Context, pollInterval time.Duration)
|
|||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
|
||||
// Note this is one of the rare cases where we do not like to use syncContainer() as it does read the exit file
|
||||
// We like to avoid that here because that means we might read it before container cleanup run and possible
|
||||
// removed the container
|
||||
if err := c.runtime.state.UpdateContainer(c); err != nil {
|
||||
if err := c.syncContainer(); err != nil {
|
||||
if errors.Is(err, define.ErrNoSuchCtr) {
|
||||
// if the container is not valid at this point as it was deleted,
|
||||
// check if the exit code was recorded in the db.
|
||||
|
@ -705,6 +702,13 @@ func (c *Container) WaitForConditionWithInterval(ctx context.Context, waitTimeou
|
|||
if len(wantedStates) > 0 {
|
||||
state, err := c.State()
|
||||
if err != nil {
|
||||
// If the we wait for removing and the container is removed do not return this as error.
|
||||
// This allows callers to actually wait for the ctr to be removed.
|
||||
if wantedStates[define.ContainerStateRemoving] &&
|
||||
(errors.Is(err, define.ErrNoSuchCtr) || errors.Is(err, define.ErrCtrRemoved)) {
|
||||
trySend(-1, nil)
|
||||
return
|
||||
}
|
||||
trySend(-1, err)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ EOF
|
|||
# container completes fast, and the cleanup *did* happen properly
|
||||
# the container is now gone. So, we need to ignore "no such
|
||||
# container" errors from podman wait.
|
||||
CONTAINERS_CONF="$conf_tmp" run_podman '?' wait "$cid"
|
||||
CONTAINERS_CONF="$conf_tmp" run_podman '?' wait --condition=removing "$cid"
|
||||
if [[ $status != 0 ]]; then
|
||||
is "$output" "Error:.*no such container" "unexpected error from podman wait"
|
||||
fi
|
||||
|
|
Loading…
Reference in New Issue