detect container is restarted

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2025-09-05 09:22:48 +02:00 committed by Guillaume Lours
parent b387ba4a05
commit cb3691154b
3 changed files with 6 additions and 7 deletions

View File

@ -138,11 +138,6 @@ func (c *monitor) Start(ctx context.Context) error {
listener(newContainerEvent(event.TimeNano, ctr, api.ContainerEventRestarted))
}
logrus.Debugf("container %s restarted", ctr.Name)
case events.ActionStop:
// when a container is in restarting phase, and we stop the application (abort-on-container-exit)
// we won't get any additional start+die events, just this stop as a proof container is down
logrus.Debugf("container %s stopped", ctr.Name)
containers.Remove(ctr.ID)
case events.ActionDie:
logrus.Debugf("container %s exited with code %d", ctr.Name, ctr.ExitCode)
inspect, err := c.api.ContainerInspect(ctx, event.Actor.ID)

View File

@ -42,7 +42,11 @@ func newLogPrinter(consumer api.LogConsumer) logPrinter {
func (p *printer) HandleEvent(event api.ContainerEvent) {
switch event.Type {
case api.ContainerEventExited:
if event.Restarting {
p.consumer.Status(event.Source, fmt.Sprintf("exited with code %d (restarting)", event.ExitCode))
} else {
p.consumer.Status(event.Source, fmt.Sprintf("exited with code %d", event.ExitCode))
}
case api.ContainerEventRecreated:
p.consumer.Status(event.Container.Labels[api.ContainerReplaceLabel], "has been recreated")
case api.ContainerEventLog, api.HookEventLog:

View File

@ -245,7 +245,7 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
if event.Type != api.ContainerEventStarted {
return
}
if slices.Contains(attached, event.ID) {
if slices.Contains(attached, event.ID) && !event.Restarting {
return
}
eg.Go(func() error {