class_docstr: Command runner for the fke docker multinode cluster.
  
  This command runner uses ``docker exec`` and ``docker cp`` to
  run commands and copy files, respectively.
  
  The regular ``DockerCommandRunner`` is made for use in SSH settings
  where Docker runs on a remote hose. In contrast, this command runner
  does not wrap the docker commands in ssh calls.
code: def _docker_expand_user(self, string, any_char=False):
      user_pos = string.find("~")
      if user_pos > -1:
          if self.home_dir is None:
              self.home_dir = self._run_shell(
                  with_docker_exec(
                      ["printenv HOME"],
                      container_name=self.container_name,
                      docker_cmd=self.docker_cmd,
                  )
              ).strip()
  
          if any_char:
              return string.replace("~/", self.home_dir + "/")
  
          elif not any_char and user_pos == 0:
              return string.replace("~", self.home_dir, 1)
  
      return string
  
file_path: ray/python/ray/autoscaler/_private/fake_multi_node/command_runner.py
imports: import os
  import subprocess
  from typing import Dict, List, Tuple
  from ray.autoscaler._private.docker import with_docker_exec
  from ray.autoscaler.command_runner import CommandRunnerInterface
label_desc: Use image node_id 8 for calling the FakeDockerCommandRunner obj's underlying member method code with example usage: obj._docker_expand_user(string, any_char) and returns: string, string, string