From f0fa9f4ae9cda9e179cce17100ccacb074f88915 Mon Sep 17 00:00:00 2001 From: Alex Davies Date: Thu, 27 Feb 2025 15:32:15 -0400 Subject: [PATCH] Injected root CA to allow image caching. --- .gitignore | 1 + docker-compose.yml | 12 ++++---- guiTools/spiri_sdk_guitools/sim_drone.py | 36 +++++++++++++++--------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 1b0e716..22e8354 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ docs/build/ .vscode *.pyc survey/ +cache/ diff --git a/docker-compose.yml b/docker-compose.yml index f1e3bb5..eab06a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,14 @@ services: - docker-registry-cache: - image: registry:2 - restart: always + docker_registry_proxy: + image: rpardini/docker-registry-proxy:0.6.5-debug ports: - - "5000:5000" + - "3128:3128" environment: - REGISTRY_PROXY_REMOTEURL: "https://registry-1.docker.io" + - ENABLE_MANIFEST_CACHE=true volumes: - - ./cache/docker:/var/lib/registry + - ./cache/docker/data:/docker_mirror_cache + - ./cache/docker/ca:/ca gui-tools: diff --git a/guiTools/spiri_sdk_guitools/sim_drone.py b/guiTools/spiri_sdk_guitools/sim_drone.py index eff84cb..8cd6821 100644 --- a/guiTools/spiri_sdk_guitools/sim_drone.py +++ b/guiTools/spiri_sdk_guitools/sim_drone.py @@ -79,6 +79,7 @@ stop_docker_daemon() atexit.register(stop_docker_daemon) + @dataclass class Robot: compose_files: List[Path] | str = "" @@ -98,17 +99,26 @@ class Robot: def setup_docker(self): """Start a Docker-in-Docker instance for the robot, using a registry cache.""" client = docker.from_env() + cache_proxy = "http://sdk-host.internal:3128" self.docker_daemon = client.containers.run( "docker:dind", privileged=True, name=f"spiri-sdk-dind-{self.robot_name}", command=( - "dockerd --host=tcp://0.0.0.0:2375 " - "--registry-mirror=http://host.docker.internal:5000 " - "--log-driver=json-file --log-opt mode=non-blocking --log-opt max-size=10m " + "sh -c '" + f"wget -O /usr/local/share/ca-certificates/proxy.crt {cache_proxy}/ca.crt && " + "update-ca-certificates && " + "dockerd --host=tcp://0.0.0.0:2375 --tls=false " + "--https-proxy http://sdk-host.internal:3128 " + "'" ), - remove=True, + environment={ + "DOCKER_BUILDKIT": "1", + # "DOCKER_TLS_CERTDIR": "", + }, + extra_hosts={"sdk-host.internal": "host-gateway"}, + # remove=True, detach=True, ) @@ -129,7 +139,7 @@ class Robot: self._docker_client = docker.DockerClient(base_url=self.docker_host) except Exception as e: logger.info(f"Waiting for docker daemon to start: {e}") - await asyncio.sleep(1) + await asyncio.sleep(0.1) return self._docker_client async def async_docker_client(self): @@ -267,18 +277,18 @@ class Robot: with ui.tabs() as tabs: # tab_logs = ui.tab("Logs") tab_containers = ui.tab("Containers") - tabs_iframe = ui.tab("ui") + # tabs_iframe = ui.tab("ui") # with ui.tab_panels(tabs, value=tab_logs): # tab = ui.tab_panel(tab_logs).classes("w-full") # asyncio.create_task(self.logs(tab)) with ui.tab_panels(tabs, value=tab_containers): - tab = ui.tab_panel(tab_containers).classes("w-full") - asyncio.create_task(self.ui_containers(tab)) - with ui.tab_panels(tabs, value=tabs_iframe): - tab = ui.tab_panel(tabs_iframe).classes("w-full") - with tab: - ui.link(f"http://{self.robot_ip}",f"http://{self.robot_ip}").classes("m-2") - ui.html(f"").classes("w-full h-screen") + containers = ui.tab_panel(tab_containers).classes("w-full") + + asyncio.create_task(self.ui_containers(containers)) + # iframe = ui.tab_panel(tabs_iframe).classes("w-full") + # with iframe: + # ui.link(f"http://{self.robot_ip}",f"http://{self.robot_ip}").classes("m-2") + # ui.html(f"").classes("w-full h-screen") async def stop(self): # If video was enabled, and we stop. Button state is wrong.