fclesio / airflow-docker-operator-with-compose

How to use the DockerOperator in Airflow within Docker Compose?

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

docker.errors.DockerException: Error while fetching server API version

Coqueiro opened this issue · comments

Hi, @fclesio! Firstly, I'd like to thank you for the tutorial you shared! That's great content.

I'm trying to run this repository's main branch on a Linux machine, and tried running the DAG and got the following error:

Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/api/client.py", line 207, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/api/client.py", line 230, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/home/airflow/.local/lib/python3.6/site-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', PermissionError(13, 'Permission denied'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1138, in _run_raw_task
    self._prepare_and_execute_task_with_callbacks(context, task)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1311, in _prepare_and_execute_task_with_callbacks
    result = self._execute_task(context, task_copy)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1341, in _execute_task
    result = task_copy.execute(context=context)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/providers/docker/operators/docker.py", line 287, in execute
    self.cli = self._get_cli()
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/providers/docker/operators/docker.py", line 319, in _get_cli
    return APIClient(base_url=self.docker_url, version=self.api_version, tls=tls_config)
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/api/client.py", line 190, in __init__
    self._version = self._retrieve_server_version()
  File "/home/airflow/.local/lib/python3.6/site-packages/docker/api/client.py", line 215, in _retrieve_server_version
    'Error while fetching server API version: {0}'.format(e)
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))
[2021-07-13 21:13:01,545] {taskinstance.py:1532} INFO - Marking task as UP_FOR_RETRY. dag_id=docker_operator_dag, task_id=docker_command_hello, execution_date=20210713T200500, start_date=20210713T211301, end_date=20210713T211301
[2021-07-13 21:13:01,606] {local_task_job.py:146} INFO - Task exited with return code 1

Are there any other setups that are necessary to run this? Like Linux file ACLs? Thanks!

I think I got it...
I created an 'airflow' user in my host machine with UID 50000 and GID 50000. Then I sudo setfacl -m u:airflow:rw /var/run/docker.sock. I wonder why people don't bump into this issue more frequently.

@Coqueiro I ran into this as well but on Macos. Has anyone solved this in a repeatable way?