diff --git a/act/container/docker_run.go b/act/container/docker_run.go index 6894654f..b7dc4ce8 100644 --- a/act/container/docker_run.go +++ b/act/container/docker_run.go @@ -221,7 +221,9 @@ func (cr *containerReference) GetHealth(ctx context.Context) (Health, error) { func (cr *containerReference) GetHealthCheckTimeout(ctx context.Context) (*time.Duration, error) { resp, err := cr.cli.ContainerInspect(ctx, cr.id) - if err != nil { + if cerrdefs.IsNotFound(err) { + return nil, ErrContainerNotFound + } else if err != nil { return nil, err } if resp.Config == nil || resp.Config.Healthcheck == nil || len(resp.Config.Healthcheck.Test) == 1 && strings.EqualFold(resp.Config.Healthcheck.Test[0], "NONE") { diff --git a/act/runner/run_context.go b/act/runner/run_context.go index 86959181..888cbadc 100644 --- a/act/runner/run_context.go +++ b/act/runner/run_context.go @@ -749,7 +749,10 @@ func (rc *RunContext) waitForServiceContainer(c container.ExecutionsEnvironment, return func(ctx context.Context) error { logger := common.Logger(ctx) timeout, err := c.GetHealthCheckTimeout(ctx) - if err != nil { + if errors.Is(err, container.ErrContainerNotFound) { + // Terminated really early -- maintain same message as ErrContainerNotFound state in the loop. + return fmt.Errorf("service container %s: failed health check or terminated before becoming healthy", serviceID) + } else if err != nil { return fmt.Errorf("service container %s: error retrieving health check details: %v", serviceID, err) } else if timeout == nil { logger.Debugf("service container %s: skipping health check wait", serviceID)