fix(docker): add file lock for port allocation to prevent race conditions
This commit is contained in:
@@ -1,26 +1,16 @@
|
||||
import os
|
||||
import platform
|
||||
import random
|
||||
import re
|
||||
|
||||
import threading
|
||||
from filelock import FileLock
|
||||
import uuid
|
||||
import zipfile
|
||||
|
||||
from time import sleep
|
||||
import shutil
|
||||
import psutil
|
||||
import subprocess
|
||||
import requests
|
||||
from tqdm import tqdm
|
||||
import docker
|
||||
|
||||
import logging
|
||||
|
||||
from desktop_env.providers.base import VMManager
|
||||
|
||||
logger = logging.getLogger("desktopenv.providers.vmware.VMwareVMManager")
|
||||
logger = logging.getLogger("desktopenv.providers.docker.DockerVMManager")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
MAX_RETRY_TIMES = 10
|
||||
@@ -30,17 +20,6 @@ UBUNTU_X86_URL = "https://huggingface.co/datasets/xlangai/ubuntu_osworld/resolve
|
||||
WINDOWS_X86_URL = "https://huggingface.co/datasets/xlangai/windows_osworld/resolve/main/Windows-10-x64.qcow2.zip"
|
||||
VMS_DIR = "./docker_vm_data"
|
||||
|
||||
# Determine the platform and CPU architecture to decide the correct VM image to download
|
||||
# if platform.system() == 'Darwin': # macOS
|
||||
# # if os.uname().machine == 'arm64': # Apple Silicon
|
||||
# URL = UBUNTU_ARM_URL
|
||||
# # else:
|
||||
# # url = UBUNTU_X86_URL
|
||||
# elif platform.machine().lower() in ['amd64', 'x86_64']:
|
||||
# URL = UBUNTU_X86_URL
|
||||
# else:
|
||||
# raise Exception("Unsupported platform or architecture")
|
||||
|
||||
URL = UBUNTU_X86_URL
|
||||
DOWNLOADED_FILE_NAME = URL.split('/')[-1]
|
||||
|
||||
@@ -48,6 +27,7 @@ if platform.system() == 'Windows':
|
||||
docker_path = r"C:\Program Files\Docker\Docker"
|
||||
os.environ["PATH"] += os.pathsep + docker_path
|
||||
|
||||
|
||||
def _download_vm(vms_dir: str):
|
||||
global URL, DOWNLOADED_FILE_NAME
|
||||
# Download the virtual machine image
|
||||
@@ -102,6 +82,7 @@ def _download_vm(vms_dir: str):
|
||||
zip_ref.extractall(vms_dir)
|
||||
logger.info("Files have been successfully extracted to the directory: " + str(vms_dir))
|
||||
|
||||
|
||||
class DockerVMManager(VMManager):
|
||||
def __init__(self, registry_path=""):
|
||||
pass
|
||||
@@ -139,4 +120,4 @@ class DockerVMManager(VMManager):
|
||||
|
||||
if not os.path.exists(os.path.join(VMS_DIR, vm_name)):
|
||||
_download_vm(VMS_DIR)
|
||||
return os.path.join(VMS_DIR, vm_name)
|
||||
return os.path.join(VMS_DIR, vm_name)
|
||||
|
||||
Reference in New Issue
Block a user