code: func (b *DockerRunner) Run(config *api.Config) error {
  	glog.V(4).Infof("Attempting to run image %s \n", config.Tag)
  
  	outReader, outWriter := io.Pipe()
  	errReader, errWriter := io.Pipe()
  
  	opts := docker.RunContainerOptions{
  		Image:        config.Tag,
  		Stdout:       outWriter,
  		Stderr:       errWriter,
  		TargetImage:  true,
  		CGroupLimits: config.CGroupLimits,
  		CapDrop:      config.DropCapabilities,
  	}
  
  	docker.StreamContainerIO(errReader, nil, func(s string) { glog.Error(s) })
  	docker.StreamContainerIO(outReader, nil, func(s string) { glog.Info(s) })
  
  	err := b.ContainerClient.RunContainer(opts)
  	// If we get a ContainerError, the original message reports the
  	// container name. The container is temporary and its name is
  	// meaningless, therefore we make the error message more helpful by
  	// replacing the container name with the image tag.
  	if e, ok := err.(s2ierr.ContainerError); ok {
  		return s2ierr.NewContainerError(config.Tag, e.ErrorCode, e.Output)
  	}
  	return err
  }
docs: // Run invokes the Docker API to run the image defined in config as a new
  // container. The container's stdout and stderr will be logged with glog.