docs: function(data) {
      return Promise.retry(function() {
        return Promise.all(_.map(normalizer(data), function(datum) {
  
          // docker-compose run requires stdin to be a tty which causes
          // all sorts of chaos when you are running this through nodewebkit
          //
          // Until we can do this directly we compose run to get docker
          // config and then hit up dockerode for analogous run activity
  
          // can inspect a started container
          var winOpts = {
            background: true,
            rm: false,
            entrypoint: 'tail',
            cmd: ['-f', '/dev/null']
          };
  
          // Do the run and return the ID
          return compose.run(
            datum.compose,
            datum.project,
            _.extend({}, datum.opts, winOpts)
          )
  
          // Inspect
          .then(function(output) {
            // @todo: a better way to do this?
            var splitter = (process.platform === 'win32') ? '\r\n' : '\n';
            var parts = output.split(splitter);
            parts.pop();
            var id = _.last(parts);
            return docker.inspect(id);
          })
  
          // Remove the container and tap the data
          .tap(function(data) {
            return docker.remove(data.Id, {force: true, v: true});
          })
  
          // Now for the crazy shit
          .then(function(data) {
  
            // Parse commandy data
            var c = datum.opts.cmd;
            var e = datum.opts.entrypoint;
            var command = (_.isArray(e)) ? [c.join(' ')] : (c || []);
            var entrypoint = (!_.isArray(e)) ? [e] : e;
  
            // Refactor our create options
            // Handle opts.mode?
            var createOpts = data.Config;
            createOpts.Cmd = _.flatten(command);
            createOpts.name = _.trimLeft(data.Name, '/');
            createOpts.AttachStdin = true;
            createOpts.AttachStdout = true;
            createOpts.AttachStderr = true;
            createOpts.Mounts = data.Mounts;
            createOpts.HostConfig = data.HostConfig;
            createOpts.Tty = true;
            createOpts.OpenStdin = true;
            createOpts.StdinOnce = true;
            createOpts.Entrypoint = entrypoint;
  
            // Try to do the run
            return docker.run(createOpts, datum.opts);
  
          });
        }));
      });
    }