Handle the non-root perms case specifically too

marketstore
Tyler Goodlet 2022-02-17 13:45:40 -05:00
parent 8f22ccd5ef
commit d6ffe1ba7a
1 changed files with 19 additions and 11 deletions

View File

@ -23,7 +23,6 @@ from typing import (
# Any, # Any,
) )
from contextlib import asynccontextmanager as acm from contextlib import asynccontextmanager as acm
from requests.exceptions import ConnectionError
# import time # import time
import trio import trio
@ -32,6 +31,8 @@ import tractor
import docker import docker
import json import json
from docker.models.containers import Container from docker.models.containers import Container
from docker.errors import DockerException
from requests.exceptions import ConnectionError
from ..log import get_logger # , get_console_log from ..log import get_logger # , get_console_log
from ..config import _config_dir from ..config import _config_dir
@ -87,24 +88,31 @@ async def open_docker(
) -> docker.DockerClient: ) -> docker.DockerClient:
client: Optional[docker.DockerClient] = None
try: try:
client = docker.DockerClient( client = docker.DockerClient(
base_url=url, base_url=url,
**kwargs **kwargs
) if url else docker.from_env(**kwargs) ) if url else docker.from_env(**kwargs)
except ( yield client
ConnectionError, except ConnectionError:
docker.errors.DockerException, # prolly no daemon started
):
raise DockerNotStarted('!?!?') raise DockerNotStarted('!?!?')
try: except DockerException as err:
yield client # could be more specific so let's check if it's just perms.
if 'PermissionError' in err.args[0]:
raise DockerException('You dint run as root yo!')
# not perms?
raise
finally: finally:
# for c in client.containers.list(): if client:
# c.kill() # for c in client.containers.list():
client.close() # c.kill()
# client.api._custom_adapter.close() client.close()
# client.api._custom_adapter.close()
# async def waitfor( # async def waitfor(