【问题标题】:Permission issue on running docker command in Python subprocess through Apache Airflow通过 Apache Airflow 在 Python 子进程中运行 docker 命令的权限问题
【发布时间】:2019-11-08 22:40:07
【问题描述】:

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

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

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

docker:在尝试连接到 Docker 时获得权限被拒绝 unix:///var/run/docker.sock 的守护进程套接字:发布 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 操作符。

请注意,这与问题不同:How to fix "dial unix /var/run/docker.sock: connect: permission denied" when group permissions seem correct? 这是一个 linux 权限问题,因为它无法运行 docker run 命令。我认为这里的问题更多在于气流。

【问题讨论】:

标签: docker airflow


【解决方案1】:

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

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

【讨论】:

  • 一个非常有趣的答案 :) 等待有人验证。
【解决方案2】:

看起来原因在于对 /var/run/docker.sock 的访问权限。 对于开发环境,您可以这样做:

docker exec -ti -u root <container> bash
sudo chmod 777 /var/run/docker.sock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 2015-10-29
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2014-07-13
    相关资源
    最近更新 更多