func (c *Composition) GetContainerIDs(dir string) (containerIDs []string, err error) {
	var cmdOutput []byte
	if cmdOutput, err = c.issueCommand([]string{"ps", "-q"}, dir); err != nil {
		return nil, fmt.Errorf("Error getting container IDs for project '%s':  %s", c.projectName, err)
	}
	containerIDs = splitDockerCommandResults(string(cmdOutput))
	return containerIDs, err
}
GetContainerIDs returns the container IDs for the composition (NOTE: does NOT include those defined outside composition, eg. chaincode containers)
package bddtests
import (
	"fmt"
	"io/ioutil"
	"os/exec"
	"strings"
	"github.com/fsouza/go-dockerclient"
)
const dockerComposeCommand = "docker-compose"
type Composition struct {
	endpoint      string
	dockerClient  *docker.Client
	apiContainers []docker.APIContainers
	composeFilesYaml string
	projectName      string
	dockerHelper     DockerHelper
}
func NewComposition(projectName string, composeFilesYaml string, dir string) (composition *Composition, err error) {
	errRetFunc := func() error {
		return fmt.Errorf("Error creating new composition '%s' using compose yaml '%s':  %s", projectName, composeFilesYaml, err)
	}
	endpoint := "unix:///var/run/docker.sock"
	composition = &Composition{composeFilesYaml: composeFilesYaml, projectName: projectName}
	if composition.dockerClient, err = docker.NewClient(endpoint); err != nil {
		return nil, errRetFunc()
	}
	if _, err = composition.issueCommand([]string{"up", "--force-recreate", "-d"}, dir); err != nil {
		return nil, errRetFunc()
	}
	if composition.dockerHelper, err = NewDockerCmdlineHelper(); err != nil {
		return nil, errRetFunc()
	}
	return composition, nil
}
func parseComposeFilesArg(composeFileArgs string) []string {
	var args []string
	for _, f := range strings.Fields(composeFileArgs) {
		args = append(args, []string{"-f", f}...)
	}
	return args
}
func (c *Composition) getFileArgs() []string {
	return parseComposeFilesArg(c.composeFilesYaml)
}