diff --git a/cli/cmd/compose/ps.go b/cli/cmd/compose/ps.go index 617367ab0..54161759a 100644 --- a/cli/cmd/compose/ps.go +++ b/cli/cmd/compose/ps.go @@ -33,9 +33,10 @@ import ( type psOptions struct { *projectOptions - Format string - All bool - Quiet bool + Format string + All bool + Quiet bool + Services bool } func psCommand(p *projectOptions) *cobra.Command { @@ -51,6 +52,7 @@ func psCommand(p *projectOptions) *cobra.Command { } psCmd.Flags().StringVar(&opts.Format, "format", "pretty", "Format the output. Values: [pretty | json].") psCmd.Flags().BoolVarP(&opts.Quiet, "quiet", "q", false, "Only display IDs") + psCmd.Flags().BoolVar(&opts.Services, "services", false, "Display services") psCmd.Flags().BoolVarP(&opts.All, "all", "a", false, "Show all stopped containers (including those created by the run command)") return psCmd } @@ -71,6 +73,17 @@ func runPs(ctx context.Context, opts psOptions) error { if err != nil { return err } + + if opts.Services { + services := []string{} + for _, s := range containers { + if !contains(services, s.Service) { + services = append(services, s.Service) + } + } + fmt.Println(strings.Join(services, "\n")) + return nil + } if opts.Quiet { for _, s := range containers { fmt.Println(s.ID) @@ -102,3 +115,12 @@ func runPs(ctx context.Context, opts psOptions) error { }, "NAME", "SERVICE", "STATUS", "PORTS") } + +func contains(slice []string, item string) bool { + for _, v := range slice { + if v == item { + return true + } + } + return false +}