Explorar o código

Default for sandbox to use the host network (#1334)

* default to use host network

* make host network as default
Xingyao Wang hai 1 ano
pai
achega
fde0392457
Modificáronse 3 ficheiros con 12 adicións e 7 borrados
  1. 1 1
      containers/app/Dockerfile
  2. 10 1
      opendevin/config.py
  3. 1 5
      opendevin/sandbox/docker/ssh_box.py

+ 1 - 1
containers/app/Dockerfile

@@ -32,7 +32,7 @@ FROM python:3.12-slim as runtime
 WORKDIR /app
 
 ENV RUN_AS_DEVIN=false
-ENV USE_HOST_NETWORK=false
+ENV USE_HOST_NETWORK=true
 ENV SSH_HOSTNAME=host.docker.internal
 ENV WORKSPACE_BASE=/opt/workspace_base
 RUN mkdir -p $WORKSPACE_BASE

+ 10 - 1
opendevin/config.py

@@ -2,6 +2,7 @@ import os
 import argparse
 import toml
 import pathlib
+import platform
 from dotenv import load_dotenv
 
 from opendevin.schema import ConfigType
@@ -36,7 +37,7 @@ DEFAULT_CONFIG: dict = {
     ConfigType.AGENT: 'MonologueAgent',
     ConfigType.E2B_API_KEY: '',
     ConfigType.SANDBOX_TYPE: 'ssh',  # Can be 'ssh', 'exec', or 'e2b'
-    ConfigType.USE_HOST_NETWORK: 'false',
+    ConfigType.USE_HOST_NETWORK: 'true',
     ConfigType.SSH_HOSTNAME: 'localhost',
     ConfigType.DISABLE_COLOR: 'false',
 }
@@ -134,6 +135,14 @@ def finalize_config():
         parts = config[ConfigType.WORKSPACE_MOUNT_REWRITE].split(':')
         config[ConfigType.WORKSPACE_MOUNT_PATH] = base.replace(parts[0], parts[1])
 
+    USE_HOST_NETWORK = config[ConfigType.USE_HOST_NETWORK].lower() != 'false'
+    if USE_HOST_NETWORK and platform.system() == 'Darwin':
+        logger.warning(
+            'Please upgrade to Docker Desktop 4.29.0 or later to use host network mode on macOS. '
+            'See https://github.com/docker/roadmap/issues/238#issuecomment-2044688144 for more information.'
+        )
+    config[ConfigType.USE_HOST_NETWORK] = USE_HOST_NETWORK
+
     if config.get(ConfigType.WORKSPACE_MOUNT_PATH) is None:
         config[ConfigType.WORKSPACE_MOUNT_PATH] = config.get(ConfigType.WORKSPACE_BASE)
 

+ 1 - 5
opendevin/sandbox/docker/ssh_box.py

@@ -1,6 +1,5 @@
 import atexit
 import os
-import platform
 import sys
 import time
 import uuid
@@ -31,10 +30,7 @@ CONTAINER_IMAGE = config.get(ConfigType.SANDBOX_CONTAINER_IMAGE)
 
 SSH_HOSTNAME = config.get(ConfigType.SSH_HOSTNAME)
 
-USE_HOST_NETWORK = platform.system() == 'Linux'
-if config.get(ConfigType.USE_HOST_NETWORK) is not None:
-    USE_HOST_NETWORK = config.get(
-        ConfigType.USE_HOST_NETWORK).lower() != 'false'
+USE_HOST_NETWORK = config.get(ConfigType.USE_HOST_NETWORK)
 
 # FIXME: On some containers, the devin user doesn't have enough permission, e.g. to install packages
 # How do we make this more flexible?