소스 검색

detect container is restarted

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 3 달 전
부모
커밋
cb3691154b
3개의 변경된 파일6개의 추가작업 그리고 7개의 파일을 삭제
  1. 0 5
      pkg/compose/monitor.go
  2. 5 1
      pkg/compose/printer.go
  3. 1 1
      pkg/compose/up.go

+ 0 - 5
pkg/compose/monitor.go

@@ -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)

+ 5 - 1
pkg/compose/printer.go

@@ -42,7 +42,11 @@ func newLogPrinter(consumer api.LogConsumer) logPrinter {
 func (p *printer) HandleEvent(event api.ContainerEvent) {
 	switch event.Type {
 	case api.ContainerEventExited:
-		p.consumer.Status(event.Source, fmt.Sprintf("exited with code %d", event.ExitCode))
+		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:

+ 1 - 1
pkg/compose/up.go

@@ -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 {