mirror of
				https://github.com/microsoft/autogen.git
				synced 2025-11-04 03:39:52 +00:00 
			
		
		
		
	feat: add bind_dir arg to DockerCommandLineExecutor + docs update (#2309)
* add bind_dir arg and update docs * lint
This commit is contained in:
		
							parent
							
								
									bcb6117c97
								
							
						
					
					
						commit
						a0fffc815b
					
				@ -45,6 +45,7 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
        container_name: Optional[str] = None,
 | 
			
		||||
        timeout: int = 60,
 | 
			
		||||
        work_dir: Union[Path, str] = Path("."),
 | 
			
		||||
        bind_dir: Optional[Union[Path, str]] = None,
 | 
			
		||||
        auto_remove: bool = True,
 | 
			
		||||
        stop_container: bool = True,
 | 
			
		||||
    ):
 | 
			
		||||
@ -67,6 +68,9 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
            timeout (int, optional): The timeout for code execution. Defaults to 60.
 | 
			
		||||
            work_dir (Union[Path, str], optional): The working directory for the code
 | 
			
		||||
                execution. Defaults to Path(".").
 | 
			
		||||
            bind_dir (Union[Path, str], optional): The directory that will be bound
 | 
			
		||||
            to the code executor container. Useful for cases where you want to spawn
 | 
			
		||||
            the container from within a container. Defaults to work_dir.
 | 
			
		||||
            auto_remove (bool, optional): If true, will automatically remove the Docker
 | 
			
		||||
                container when it is stopped. Defaults to True.
 | 
			
		||||
            stop_container (bool, optional): If true, will automatically stop the
 | 
			
		||||
@ -85,6 +89,11 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
 | 
			
		||||
        work_dir.mkdir(exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        if bind_dir is None:
 | 
			
		||||
            bind_dir = work_dir
 | 
			
		||||
        elif isinstance(bind_dir, str):
 | 
			
		||||
            bind_dir = Path(bind_dir)
 | 
			
		||||
 | 
			
		||||
        client = docker.from_env()
 | 
			
		||||
 | 
			
		||||
        # Check if the image exists
 | 
			
		||||
@ -105,7 +114,7 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
            entrypoint="/bin/sh",
 | 
			
		||||
            tty=True,
 | 
			
		||||
            auto_remove=auto_remove,
 | 
			
		||||
            volumes={str(work_dir.resolve()): {"bind": "/workspace", "mode": "rw"}},
 | 
			
		||||
            volumes={str(bind_dir.resolve()): {"bind": "/workspace", "mode": "rw"}},
 | 
			
		||||
            working_dir="/workspace",
 | 
			
		||||
        )
 | 
			
		||||
        self._container.start()
 | 
			
		||||
@ -132,6 +141,7 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
 | 
			
		||||
        self._timeout = timeout
 | 
			
		||||
        self._work_dir: Path = work_dir
 | 
			
		||||
        self._bind_dir: Path = bind_dir
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def timeout(self) -> int:
 | 
			
		||||
@ -143,6 +153,11 @@ class DockerCommandLineCodeExecutor(CodeExecutor):
 | 
			
		||||
        """(Experimental) The working directory for the code execution."""
 | 
			
		||||
        return self._work_dir
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def bind_dir(self) -> Path:
 | 
			
		||||
        """(Experimental) The binding directory for the code execution container."""
 | 
			
		||||
        return self._bind_dir
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def code_extractor(self) -> CodeExtractor:
 | 
			
		||||
        """(Experimental) Export a code extractor that can be used by an agent."""
 | 
			
		||||
 | 
			
		||||
@ -73,7 +73,9 @@
 | 
			
		||||
    "-v /var/run/docker.sock:/var/run/docker.sock\n",
 | 
			
		||||
    "```\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    "This will allow the AutoGen container to spawn and control sibling containers on the host."
 | 
			
		||||
    "This will allow the AutoGen container to spawn and control sibling containers on the host.\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    "If you need to bind a working directory to the AutoGen container but the directory belongs to your host machine, use the `bind_dir` parameter. This will allow the main AutoGen container to bind the *host* directory to the new spawned containers and allow it to access the files within the said directory. If the `bind_dir` is not specified, it will fallback to `work_dir`."
 | 
			
		||||
   ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user