Injected root CA to allow image caching.
Some checks failed
Build Docs / build (push) Failing after 31s

This commit is contained in:
Alex Davies 2025-02-27 15:32:15 -04:00
parent 3f94c26d4b
commit f0fa9f4ae9
3 changed files with 30 additions and 19 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ docs/build/
.vscode
*.pyc
survey/
cache/

View File

@ -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:

View File

@ -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"<iframe src='http://{self.robot_ip}' class='w-full h-screen'></iframe>").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"<iframe src='http://{self.robot_ip}' class='w-full h-screen'></iframe>").classes("w-full h-screen")
async def stop(self):
# If video was enabled, and we stop. Button state is wrong.