【问题标题】:Airflow DockerOperator workaround for Docker-in-Docker SetupDocker-in-Docker 设置的 Airflow DockerOperator 解决方法
【发布时间】:2022-10-06 00:58:59
【问题描述】:

我使用 Docker 部署了 Airflow (2.2.4),我想在一些 DAG 任务中使用 DockerOperator。我也想用那些 DockerOperator 任务挂载一个卷,但似乎坐骑该功能不适用于 Docker-in-Docker 设置。

我试图想出一个优雅的解决方法,因为我真的需要从这个容器中获取创建的数据(日志文件和可能由 great_expecations 提供的数据质量报告)。

到目前为止,我已经考虑使用 scp 和 SSH 密钥作为环境变量,并将其作为额外命令添加到 DockerOperator。我还查看了 XCom 功能,但我认为它不符合目的。还有其他人有想法吗?

示例任务:

etl_db_connections_check = DockerOperator(
    task_id=\"etl_db_connections_check\", 
    image=\'sample_image:latest\',
    api_version=\'auto\',
    auto_remove=True,
    environment=environment,
    command=\'/bin/bash -c \\\'python /app/src/main.py connection_check\\\'\',
    docker_url=\'unix://var/run/docker.sock\',
    network_mode=\'bridge\',
    docker_conn_id=\'private_registry\',
    xcom_all=True,
    privileged=True,
    mount_tmp_dir=False,
    mounts=[
        Mount(
        source=\'/data/airflow/dags/sample-logs\', 
        target=\'/logs:rw\', 
        type=\'bind\'
    )]
)

    标签: python airflow


    【解决方案1】:

    假设您将气流作为容器运行在 linux 主机上:您需要让气流用户访问您主机的/var/run/docker.sock。这需要两个都

    1. 在气流 docker-compose 的 x-airflow-common 服务中添加卷映射 /var/run/docker.sock:/var/run/docker.sock
    2. 授予容器内的aiflow用户访问它的权限。当您在主机上安装docker 时,您可能创建了一个“docker”组。获取该组的 GID(一个数字)(cat /etc/group | grep docker 应该输出 docker:x:###:username)。将 GID ### 添加到气流 docker-compose 的 x-airflow-common 服务:
        group_add:
         - ###
      

      然后重新启动气流(docker-compose kill 后跟docker-compose up airflow-init && docker-compose up),使用DockerOperator 的 dag 任务应该可以工作。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 2019-07-29
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多