Injected root CA to allow image caching.
Some checks failed
Build Docs / build (push) Failing after 31s
Some checks failed
Build Docs / build (push) Failing after 31s
This commit is contained in:
parent
3f94c26d4b
commit
f0fa9f4ae9
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ docs/build/
|
||||
.vscode
|
||||
*.pyc
|
||||
survey/
|
||||
cache/
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user