首页 > 解决方案 > 通过 Apache Airflow 在 Python 子进程中运行 docker 命令的权限问题

问题描述

知道为什么我不能使用 Airflow 运行 docker 吗?

使用运行气流的用户,相同的 docker 命令可以从终端正常运行。所以Linux端没有权限问题。

但是当把它放入 Airflow dag 时,它会抱怨

docker:在尝试连接到 unix:///var/run/docker.sock 的 Docker 守护程序套接字时获得权限被拒绝:发布 http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/create:拨打 unix /var/run/docker.sock:连接:权限被拒绝。

命令很简单docker run --rm -v /data:/data:ro docker_image mycommand。它被包裹在一个 python 子进程中,所以我不能使用 docker 操作符。

请注意,这与问题不同:当组权限似乎正确时,如何修复“dial unix /var/run/docker.sock: connect: permission denied”? 这是一个 linux 权限问题,因为它无法运行该docker run命令。我认为,这里的问题更多在于气流。

标签: dockerairflow

解决方案


面临类似的问题。通过将 airflow.cfg 中的 default_owner(default=airflow) 更改为有权访问 docker 的用户(即属于 docker 组的用户名)来修复它。

有趣的是,在 DAG 定义中的“default_args”中传递所有者似乎不起作用


推荐阅读