使用无根 Docker 与 Apache Airflow Docker Operator

3
我正在处理一个项目,使用Apache Airflow来调度不同的脚本。
Airflow本身和设置DAG的脚本都打包在一个Dockerfile中。每个DAG的核心部分是一个dockeroperator,它在主机系统上启动适当的容器。(注意:要求每个Airflow及其调度的脚本都有一个Dockerfile)
目前,在主机系统上运行的docker具有root权限,如此建议此处。在启动我的Airflow容器时,我使用-v /var/run/docker.sock:/var/run/docker.sock 创建了一个卷。在这个配置下,Airflow可以按预期且无误地启动容器。
然而,因为以root权限运行docker似乎不安全,所以我尝试了docker的rootless模式(https://docs.docker.com/engine/security/rootless/)。
在设置后,所有容器在主机上单独工作得非常好。只有在运行Airflow容器时才会出现问题。
错误消息很长,所以我只发布最后一行:docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied')) 这个错误和之前我的整个设置的早期迭代中没有创建上面提到的卷时得到的错误相同,因此问题可能与Airflow容器中的docker守护程序没有正确权限有关,但我不知道如何修复它。
1个回答

1
你可以使用docker compose启动整个设置。 docker-compose文件的一个好的起点是此处提供的文件: https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html 您可以选择默认UID = 50000和GID = 0或自定义UID。在主机上创建此UID,创建docker组并将此用户添加到该组中。然后将容器内的airflow用户添加到此组中。您可以通过添加compose文件来执行此操作。
group_add:
  - <docker GID>

注意!如果您在Dockerfile中使用自定义镜像并将用户添加到docker组中,则没有效果,因为这些设置会被docker compose startup.sh覆盖。
此外,您还需要将docker.sock文件挂载到容器中。
volumes:
  - /var/run/docker.sock:/var/run/docker.sock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接