// replicateImage replicates the given image through all nodes in the cluster. func replicateImage(name string) error { var buf safe.Buffer if _, err := config.GetString("docker:registry"); err == nil { pushOpts := docker.PushImageOptions{Name: name, OutputStream: &buf} for i := 0; i < maxTry; i++ { err = dockerCluster().PushImage(pushOpts, docker.AuthConfiguration{}) if err == nil { buf.Reset() break } log.Errorf("[docker] Failed to push image %q (%s): %s", name, err, buf.String()) buf.Reset() } if err != nil { return err } pullOpts := docker.PullImageOptions{Repository: name, OutputStream: &buf} for i := 0; i < maxTry; i++ { err = dockerCluster().PullImage(pullOpts) if err == nil { break } buf.Reset() } if err != nil { log.Errorf("[docker] Failed to replicate image %q through nodes (%s): %s", name, err, buf.String()) return err } } return nil }