@@ -272,7 +272,7 @@ def create_deployment(
272272 raise
273273
274274
275- PLATFORM_ENV_VAR = "DOCKER_DEFAULT_PLATFORM= linux/amd64"
275+ PLATFORM_ENV = { "DOCKER_DEFAULT_PLATFORM" : " linux/amd64"}
276276DOCKER_IMAGE_NAME = "datacloud-custom-code-dependency-builder"
277277DEPENDENCIES_ARCHIVE_NAME = "native_dependencies"
278278DEPENDENCIES_ARCHIVE_FULL_NAME = f"{ DEPENDENCIES_ARCHIVE_NAME } .tar.gz"
@@ -286,19 +286,25 @@ def prepare_dependency_archive(directory: str, docker_network: str) -> None:
286286 cmd = f"docker images -q { DOCKER_IMAGE_NAME } "
287287 image_exists = cmd_output (cmd )
288288
289+ docker_env = {** os .environ , ** PLATFORM_ENV }
290+
289291 if not image_exists :
290292 logger .info (f"Building docker image with docker network: { docker_network } ..." )
291293 cmd = docker_build_cmd (docker_network )
292- cmd_output (cmd )
294+ cmd_output (cmd , env = docker_env )
293295
294- with tempfile .TemporaryDirectory () as temp_dir :
296+ # ignore_cleanup_errors=True: on Windows, Docker creates files inside the
297+ # mounted volume whose permissions prevent the host from deleting them.
298+ # The archive has already been copied out, so silently skipping leftover
299+ # files is safe and avoids a fatal error on context-manager exit.
300+ with tempfile .TemporaryDirectory (ignore_cleanup_errors = True ) as temp_dir :
295301 logger .info (
296302 f"Building dependencies archive with docker network: { docker_network } "
297303 )
298304 shutil .copy ("requirements.txt" , temp_dir )
299305 shutil .copy ("build_native_dependencies.sh" , temp_dir )
300306 cmd = docker_run_cmd (docker_network , temp_dir )
301- cmd_output (cmd )
307+ cmd_output (cmd , env = docker_env )
302308 archives_temp_path = os .path .join (temp_dir , DEPENDENCIES_ARCHIVE_FULL_NAME )
303309 os .makedirs (os .path .dirname (DEPENDENCIES_ARCHIVE_PATH ), exist_ok = True )
304310 shutil .copy (archives_temp_path , DEPENDENCIES_ARCHIVE_PATH )
@@ -307,23 +313,19 @@ def prepare_dependency_archive(directory: str, docker_network: str) -> None:
307313
308314
309315def docker_build_cmd (network : str ) -> str :
310- cmd = (
311- f"{ PLATFORM_ENV_VAR } docker build -t { DOCKER_IMAGE_NAME } "
312- f"--file Dockerfile.dependencies . "
313- )
316+ cmd = f"docker build -t { DOCKER_IMAGE_NAME } --file Dockerfile.dependencies . "
314317
315318 if network != "default" :
316319 cmd = cmd + f"--network { network } "
317320 logger .debug (f"Docker build command: { cmd } " )
318321 return cmd
319322
320323
321- def docker_run_cmd (network : str , temp_dir ) -> str :
322- cmd = (
323- f"{ PLATFORM_ENV_VAR } docker run --rm "
324- f"-v { temp_dir } :/workspace "
325- f"{ DOCKER_IMAGE_NAME } "
326- )
324+ def docker_run_cmd (network : str , temp_dir : str ) -> str :
325+ # Normalise path separators: Docker expects forward slashes even on Windows,
326+ # and quoting handles paths that contain spaces.
327+ docker_path = temp_dir .replace ("\\ " , "/" )
328+ cmd = f'docker run --rm -v "{ docker_path } :/workspace" { DOCKER_IMAGE_NAME } '
327329
328330 if network != "default" :
329331 cmd = cmd + f"--network { network } "
0 commit comments