Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 4e5734f

Browse files
committed
stop as all registered containers exited || cascadestop
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 15882d3 commit 4e5734f

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

cli/cmd/compose/up.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -315,26 +315,35 @@ type printer struct {
315315

316316
func (p printer) run(ctx context.Context, cascadeStop bool, exitCodeFrom string, consumer compose.LogConsumer, stopFn func() error) (int, error) { //nolint:unparam
317317
var aborting bool
318+
var count int
318319
for {
319320
event := <-p.queue
320321
switch event.Type {
321322
case compose.ContainerEventAttach:
322323
consumer.Register(event.Service, event.Source)
324+
count++
323325
case compose.ContainerEventExit:
324326
if !aborting {
325327
consumer.Status(event.Service, event.Source, fmt.Sprintf("exited with code %d", event.ExitCode))
326328
}
327-
if cascadeStop && !aborting {
328-
aborting = true
329-
fmt.Println("Aborting on container exit...")
330-
err := stopFn()
331-
if err != nil {
332-
return 0, err
329+
if cascadeStop {
330+
if !aborting {
331+
aborting = true
332+
fmt.Println("Aborting on container exit...")
333+
err := stopFn()
334+
if err != nil {
335+
return 0, err
336+
}
337+
}
338+
if exitCodeFrom == "" || exitCodeFrom == event.Service {
339+
logrus.Error(event.ExitCode)
340+
return event.ExitCode, nil
333341
}
334342
}
335-
if exitCodeFrom == "" || exitCodeFrom == event.Service {
336-
logrus.Error(event.ExitCode)
337-
return event.ExitCode, nil
343+
count--
344+
if count == 0 {
345+
// Last container terminated, done
346+
return 0, nil
338347
}
339348
case compose.ContainerEventLog:
340349
if !aborting {

0 commit comments

Comments
 (0)