// buildImage invokes a docker build on a particular directory func buildImage(client DockerClient, dir string, tar tar.Tar, opts *docker.BuildImageOptions) error { // TODO: be able to pass a stream directly to the Docker build to avoid the double temp hit if opts == nil { return fmt.Errorf("%s", "build image options nil") } r, w := io.Pipe() go func() { defer utilruntime.HandleCrash() defer w.Close() if err := tar.CreateTarStream(dir, false, w); err != nil { w.CloseWithError(err) } }() defer w.Close() opts.InputStream = r glog.V(5).Infof("Invoking Docker build to create %q", opts.Name) return client.BuildImage(*opts) }