// composeUp converts given json to yaml, saves to a file on the host and // uses `docker-compose up -d` to create the containers. func composeUp(d driver.DistroDriver, json map[string]interface{}) error { if len(json) == 0 { log.Println("docker-compose config not specified, noop") return nil } // Convert json to yaml yaml, err := yaml.Marshal(json) if err != nil { return fmt.Errorf("error converting to compose.yml: %v", err) } if err := os.MkdirAll(composeYmlDir, 0777); err != nil { return fmt.Errorf("failed creating %s: %v", composeYmlDir, err) } log.Printf("Using compose yaml:>>>>>\n%s\n<<<<<", string(yaml)) ymlPath := filepath.Join(composeYmlDir, composeYml) if err := ioutil.WriteFile(ymlPath, yaml, 0666); err != nil { return fmt.Errorf("error writing %s: %v", ymlPath, err) } // set timeout for docker-compose -> docker-engine interactions. // When downloading large images, docker-compose intermittently times out // (gh#docker/compose/issues/2186). os.Setenv("COMPOSE_HTTP_TIMEOUT", fmt.Sprintf("%d", composeTimeoutSecs)) // versions <= 1.4.2 os.Setenv("DOCKER_CLIENT_TIMEOUT", fmt.Sprintf("%d", composeTimeoutSecs)) // version >= 1.5.0 defer os.Unsetenv("COMPOSE_HTTP_TIMEOUT") defer os.Unsetenv("DOCKER_CLIENT_TIMEOUT") return executil.ExecPipeToFds(executil.Fds{Out: ioutil.Discard}, composeBinPath(d), "-p", composeProject, "-f", ymlPath, "up", "-d") }
// composeUp converts given json to yaml, saves to a file on the host and // uses `docker-compose up -d` to create the containers. func composeUp(d driver.DistroDriver, json map[string]interface{}) error { if len(json) == 0 { log.Println("docker-compose config not specified, noop") return nil } // Convert json to yaml yaml, err := yaml.Marshal(json) if err != nil { return fmt.Errorf("error converting to compose.yml: %v", err) } if err := os.MkdirAll(composeYmlDir, 0777); err != nil { return fmt.Errorf("failed creating %s: %v", composeYmlDir, err) } log.Printf("Using compose yaml:>>>>>\n%s\n<<<<<", string(yaml)) ymlPath := filepath.Join(composeYmlDir, composeYml) if err := ioutil.WriteFile(ymlPath, yaml, 0666); err != nil { return fmt.Errorf("error writing %s: %v", ymlPath, err) } return executil.ExecPipeToFds(executil.Fds{Out: ioutil.Discard}, composeBinPath(d), "-p", composeProject, "-f", ymlPath, "up", "-d") }