docs: function(appName) {
  
      // Query docker for list of containers.
      return dockerInstance()
      .then(function(dockerInstance) {
        // Make sure to retry call to list containers.
        return Promise.fromNode(function(cb) {
          dockerInstance.listContainers({all: 1}, cb);
        });
      })
      // Make sure we have a timeout.
      .timeout(30 * 1000)
      // Wrap errors.
      .catch(function(err) {
        throw new VError(err, 'Error querying docker for list of containers.');
      })
      // Filter out containers with invalid status
      .filter(function(data) {
        return data.Status !== 'Removal In Progress';
      })
      // Map docker containers to generic containers.
      .map(toGenericContainer)
      // Filter out nulls and undefineds.
      .filter(_.identity)
      // Filter out all non-kalabox containers
      .filter(function(data) {
        return data.kalabox === true;
      })
      // Filter by app name if an app name was given.
      .then(function(containers) {
        if (appName) {
          return Promise.filter(containers, function(container) {
            return container.app === appName;
          });
        } else {
          return containers;
        }
      });
  
    }