docker - 将 apache 气流 docker 运算符与无根 docker 一起使用
问题描述
我正在开发一个使用 apache 气流来安排不同脚本的项目。
Airflow 本身和设置 DAG 的脚本捆绑在一个 Dockerfile 中。每个 DAG 的中心部分是一个 dockeroperator,它在主机系统上启动相应的容器。
(注意:要求每个气流及其调度的脚本每个都有一个 Dockerfile)
目前,主机系统上的 docker 具有此处建议的 root 权限。启动气流容器时,我使用-v /var/run/docker.sock:/var/run/docker.sock创建一个卷。在这种配置中,气流按预期启动容器并且没有问题。
但是,因为以 root 权限运行 docker 似乎不安全,所以我尝试了 docker 的无根模式(https://docs.docker.com/engine/security/rootless/)。
设置后,所有容器在主机上都可以正常工作。只有当我运行气流容器时,我才会遇到问题。
错误信息很长,所以我只发布最后一行:docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))
此错误与我在整个设置的早期迭代中未创建上述卷时遇到的错误相同,因此该问题可能与气流容器中的 docker 守护进程没有正确的权限有关,但我没有不知道如何解决这个问题。
解决方案
您可以使用 docker compose 启动整个设置。docker-compose 文件的一个很好的起点是这里给出的: https ://airflow.apache.org/docs/apache-airflow/stable/start/docker.html
您可以选择默认 UID=50000 和 GID=0 或自定义 UID。在主机上创建此 UID,创建一个 docker 组并将此用户添加到该组。然后将容器内的气流用户添加到该组中。您可以通过添加在撰写文件中执行此操作
group_add:
- <docker GID>
笔记!如果您使用自定义映像并将用户添加到 Dockerfile 中的 docker 组,则它不起作用,因为这些设置被 docker compose startup.sh 覆盖
此外,您必须将 docker.sock 文件挂载到容器中
volumes:
- /var/run/docker.sock:/var/run/docker.sock
推荐阅读
- ffmpeg - FFMPEG - 两个输入,反转第二个输入
- .net - 如何将 .NET Framework 程序集引用添加到 .NET Standard 2.0 项目?
- c++ - 关于类构造方法的简单语法问题
- python - 执行 python 脚本时 Gem5 不工作
- prismic.io - 棱镜:有没有办法在另一个字段中嵌套字段?
- crystal-lang - 为什么 Crystal 无法推断实例变量的类型?
- mysql - MySQL 5.7 Spring JPA 事务管理不起作用
- python - 如何操作熊猫数据框以获取具有相同第一次出现的特征的某些行
- node.js - 在 NGINX 服务器上设置 HTTPS
- text - 在文本文件列表中同时搜索多个模式