docs: def update(self):
          """Update Docker stats using the input method."""
          # Init new stats
          stats = self.get_init_value()
  
          # The Docker-py lib is mandatory
          if import_error_tag:
              return self.stats
  
          if self.input_method == 'local':
              # Update stats
  
              # Docker version
              # Exemple: {
              #     "KernelVersion": "3.16.4-tinycore64",
              #     "Arch": "amd64",
              #     "ApiVersion": "1.15",
              #     "Version": "1.3.0",
              #     "GitCommit": "c78088f",
              #     "Os": "linux",
              #     "GoVersion": "go1.3.3"
              # }
              try:
                  stats['version'] = self.docker_client.version()
              except Exception as e:
                  # Correct issue#649
                  logger.error("{} plugin - Cannot get Docker version ({})".format(self.plugin_name, e))
                  return self.stats
  
              # Update current containers list
              try:
                  # Issue #1152: Docker module doesn't export details about stopped containers
                  # The Docker/all key of the configuration file should be set to True
                  containers = self.docker_client.containers.list(all=self._all_tag()) or []
              except Exception as e:
                  logger.error("{} plugin - Cannot get containers list ({})".format(self.plugin_name, e))
                  return self.stats
  
              # Start new thread for new container
              for container in containers:
                  if container.id not in self.thread_list:
                      # Thread did not exist in the internal dict
                      # Create it and add it to the internal dict
                      logger.debug("{} plugin - Create thread for container {}".format(self.plugin_name, container.id[:12]))
                      t = ThreadDockerGrabber(container)
                      self.thread_list[container.id] = t
                      t.start()
  
              # Stop threads for non-existing containers
              nonexisting_containers = set(iterkeys(self.thread_list)) - set([c.id for c in containers])
              for container_id in nonexisting_containers:
                  # Stop the thread
                  logger.debug("{} plugin - Stop thread for old container {}".format(self.plugin_name, container_id[:12]))
                  self.thread_list[container_id].stop()
                  # Delete the item from the dict
                  del self.thread_list[container_id]
  
              # Get stats for all containers
              stats['containers'] = []
              for container in containers:
                  # Init the stats for the current container
                  container_stats = {}
                  # The key is the container name and not the Id
                  container_stats['key'] = self.get_key()
                  # Export name (first name in the Names list, without the /)
                  container_stats['name'] = nativestr(container.name)
                  # Export global Names (used by the WebUI)
                  container_stats['Names'] = [nativestr(container.name)]
                  # Container Id
                  container_stats['Id'] = container.id
                  # Container Image
                  container_stats['Image'] = container.image.tags
                  # Global stats (from attrs)
                  container_stats['Status'] = container.attrs['State']['Status']
                  container_stats['Command'] = container.attrs['Config']['Entrypoint']
                  # Standards stats
                  if container_stats['Status'] in ('running', 'paused'):
                      container_stats['cpu'] = self.get_docker_cpu(container.id, self.thread_list[container.id].stats)
                      container_stats['cpu_percent'] = container_stats['cpu'].get('total', None)
                      container_stats['memory'] = self.get_docker_memory(container.id, self.thread_list[container.id].stats)
                      container_stats['memory_usage'] = container_stats['memory'].get('usage', None)
                      container_stats['io'] = self.get_docker_io(container.id, self.thread_list[container.id].stats)
                      container_stats['io_r'] = container_stats['io'].get('ior', None)
                      container_stats['io_w'] = container_stats['io'].get('iow', None)
                      container_stats['network'] = self.get_docker_network(container.id, self.thread_list[container.id].stats)
                      container_stats['network_rx'] = container_stats['network'].get('rx', None)
                      container_stats['network_tx'] = container_stats['network'].get('tx', None)
                  else:
                      container_stats['cpu'] = {}
                      container_stats['cpu_percent'] = None
                      container_stats['memory'] = {}
                      container_stats['memory_percent'] = None
                      container_stats['io'] = {}
                      container_stats['io_r'] = None
                      container_stats['io_w'] = None
                      container_stats['network'] = {}
                      container_stats['network_rx'] = None
                      container_stats['network_tx'] = None
                  # Add current container stats to the stats list
                  stats['containers'].append(container_stats)
  
          elif self.input_method == 'snmp':
              # Update stats using SNMP
              # Not available
              pass
  
          # Sort and update the stats
          self.stats = sort_stats(stats)
  
          return self.stats