diff --git a/cmd/compose/compose.go b/cmd/compose/compose.go index 300164ca5..238acdd60 100644 --- a/cmd/compose/compose.go +++ b/cmd/compose/compose.go @@ -505,6 +505,7 @@ func RootCommand(dockerCli command.Cli, backendOptions *BackendOptions) *cobra.C display.Mode = display.ModeTTY } + detached, _ := cmd.Flags().GetBool("detach") var ep api.EventProcessor switch opts.Progress { case "", display.ModeAuto: @@ -513,7 +514,7 @@ func RootCommand(dockerCli command.Cli, backendOptions *BackendOptions) *cobra.C display.Mode = display.ModePlain ep = display.Plain(dockerCli.Err()) case dockerCli.Out().IsTerminal(): - ep = display.Full(dockerCli.Err(), stdinfo(dockerCli)) + ep = display.Full(dockerCli.Err(), stdinfo(dockerCli), detached) default: ep = display.Plain(dockerCli.Err()) } @@ -522,7 +523,7 @@ func RootCommand(dockerCli command.Cli, backendOptions *BackendOptions) *cobra.C return fmt.Errorf("can't use --progress tty while ANSI support is disabled") } display.Mode = display.ModeTTY - ep = display.Full(dockerCli.Err(), stdinfo(dockerCli)) + ep = display.Full(dockerCli.Err(), stdinfo(dockerCli), detached) case display.ModePlain: if ansi == "always" { diff --git a/cmd/display/tty.go b/cmd/display/tty.go index dd45ffd70..3a69ebaad 100644 --- a/cmd/display/tty.go +++ b/cmd/display/tty.go @@ -37,13 +37,14 @@ import ( // Full creates an EventProcessor that render advanced UI within a terminal. // On Start, TUI lists task with a progress timer -func Full(out io.Writer, info io.Writer) api.EventProcessor { +func Full(out io.Writer, info io.Writer, detached bool) api.EventProcessor { return &ttyWriter{ - out: out, - info: info, - tasks: map[string]*task{}, - done: make(chan bool), - mtx: &sync.Mutex{}, + out: out, + info: info, + tasks: map[string]*task{}, + done: make(chan bool), + mtx: &sync.Mutex{}, + detached: detached, } } @@ -60,6 +61,7 @@ type ttyWriter struct { ticker *time.Ticker suspended bool info io.Writer + detached bool } type task struct { @@ -190,7 +192,7 @@ func (w *ttyWriter) On(events ...api.Resource) { continue } - if w.operation != "start" && (e.Text == api.StatusStarted || e.Text == api.StatusStarting) { + if w.operation != "start" && (e.Text == api.StatusStarted || e.Text == api.StatusStarting) && !w.detached { // skip those events to avoid mix with container logs continue } diff --git a/pkg/e2e/networks_test.go b/pkg/e2e/networks_test.go index c9b882b91..f556681e6 100644 --- a/pkg/e2e/networks_test.go +++ b/pkg/e2e/networks_test.go @@ -212,11 +212,9 @@ func TestNetworkRecreate(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/network-recreate/compose.yaml", "--project-name", projectName, "--progress=plain", "up", "-d") err := res.Stderr() fmt.Println(err) - res.Assert(t, icmd.Expected{Err: ` - Container network_recreate-web-1 Stopped - Network network_recreate_test Removed - Network network_recreate_test Creating - Network network_recreate_test Created - Container network_recreate-web-1 Starting - Container network_recreate-web-1 Started`}) + hasStopped := strings.Contains(err, "Stopped") + hasResumed := strings.Contains(err, "Started") || strings.Contains(err, "Recreated") + if !hasStopped || !hasResumed { + t.Fatalf("unexpected output, missing expected events, stderr: %s", err) + } }