docs: def _crawl_container_pids(self, container_dict, custom_cgroups=False):
          """Crawl `/proc` to find container PIDs and add them to `containers_by_id`."""
          proc_path = os.path.join(self.docker_util._docker_root, 'proc')
          pid_dirs = [_dir for _dir in os.listdir(proc_path) if _dir.isdigit()]
  
          if len(pid_dirs) == 0:
              self.warning("Unable to find any pid directory in {0}. "
                           "If you are running the agent in a container, make sure to "
                           'share the volume properly: "/proc:/host/proc:ro". '
                           "See https://github.com/DataDog/docker-dd-agent/blob/master/README.md for more information. "
                           "Network metrics will be missing".format(proc_path))
              self._disable_net_metrics = True
              return container_dict
  
          self._disable_net_metrics = False
  
          for folder in pid_dirs:
              try:
                  path = os.path.join(proc_path, folder, 'cgroup')
                  with open(path, 'r') as f:
                      content = [line.strip().split(':') for line in f.readlines()]
  
                  selinux_policy = ''
                  path = os.path.join(proc_path, folder, 'attr', 'current')
                  if os.path.exists(path):
                      with open(path, 'r') as f:
                          selinux_policy = f.readlines()[0]
              except IOError, e:
                  #  Issue #2074
                  self.log.debug("Cannot read %s, process likely raced to finish : %s", path, e)
              except Exception as e:
                  self.warning("Cannot read %s : %s" % (path, str(e)))
                  continue
  
              try:
                  for line in content:
                      if self._is_container_cgroup(line, selinux_policy):
                          cpuacct = line[2]
                          break
                  else:
                      continue
  
                  matches = re.findall(CONTAINER_ID_RE, cpuacct)
                  if matches:
                      container_id = matches[-1]
                      if container_id not in container_dict:
                          self.log.debug(
                              "Container %s not in container_dict, it's likely excluded", container_id
                          )
                          continue
                      container_dict[container_id]['_pid'] = folder
                      container_dict[container_id]['_proc_root'] = os.path.join(proc_path, folder)
                  elif custom_cgroups:  # if we match by pid that should be enough (?) - O(n) ugh!
                      for _, container in container_dict.iteritems():
                          if container.get('_pid') == int(folder):
                              container['_proc_root'] = os.path.join(proc_path, folder)
                              break
  
              except Exception, e:
                  self.warning("Cannot parse %s content: %s" % (path, str(e)))
                  continue
          return container_dict