繁体   English   中英

如何在 Airflow (docker-compose) 中安装包?

[英]How to install packages in Airflow (docker-compose)?

这个问题与已有的问题非常相似。 唯一的区别是我在 docker 中运行了 Airflow

一步步:

  1. docker-compose.yaml放到PyCharm项目中
  2. requirements.txt放到 PyCharm 项目中
  3. 运行docker-compose up
  4. 运行 DAG 并收到ModuleNotFoundError

我想使用 docker-composerequirements.txt的依赖项启动 Airflow 。 PyCharm 解释器和 DAG 执行期间应该可以使用这些依赖项

是否有不需要重建图像的解决方案?

在 airflow GitHub 讨论中得到了答案 现在安装额外的 python 包以构建您自己的映像的唯一方法。 我将尝试更详细地解释此解决方案

Step 1.Dockerfile , docker-compose.yamlrequirements.txt文件放到工程目录下

步骤 2.粘贴到下面的 Dockefile 代码:

FROM apache/airflow:2.1.0
COPY requirements.txt .
RUN pip install -r requirements.txt

步骤 3.粘贴到docker-compose.yaml代码,您可以在官方文档中找到该代码。 将部分image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.1.0}替换为build: .

---
version: '3'
x-airflow-common:
  &airflow-common
  build: .
  # REPLACED # image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.1.0}
  environment:
    &airflow-common-env
    AIRFLOW__CORE__EXECUTOR: CeleryExecutor
    AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
    AIRFLOW__CORE__FERNET_KEY: ''
    AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: 'true'
    AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
    AIRFLOW__API__AUTH_BACKEND: 'airflow.api.auth.backend.basic_auth'
  volumes:
    - ./dags:/opt/airflow/dags
    - ./logs:/opt/airflow/logs
    - ./plugins:/opt/airflow/plugins
  user: "${AIRFLOW_UID:-50000}:${AIRFLOW_GID:-50000}"
  depends_on:
    redis:
      condition: service_healthy
    postgres:
      condition: service_healthy

# ...

此时您的项目目录应如下所示:

airflow-project
|docker-compose.yaml
|Dockerfile
|requirements.txt

步骤 4.运行docker-compose up以启动 Airflow, docker-compose应该从Dockerfile自动构建您的图像。 运行docker-compose build重建镜像并更新依赖

是否有不需要重建图像的解决方案?

是的,现在有:目前(oct-2021 v2.2.0)它可作为环境变量使用:

_PIP_ADDITIONAL_REQUIREMENTS

它在 docker-compose.yml 文件中使用。 正如其他一些答案所解释的那样,这应该可以在不构建完整图像的情况下解决问题(实际上很好:-)

请参阅: https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml

官方文档https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#environment-variables-supported-by-docker-compose

另一种选择是更新您的文件 docker-compose.yml,将以下行与您需要的所有命令一起放入

  command: -c "pip3 install apache-airflow-providers-sftp  apache-airflow-providers-ssh --user"

并重建图像

docker-compose up airflow-init
docker-compose up

1. 创建新的 Airflow docker 映像并安装 Python 要求

Check what Airflow image your docker-compose.yaml is using and use that image, in my case it's: apache/airflow:2.3.2 I same folder where you have your docker-compose.yaml create Dockerfile with following content:

FROM apache/airflow:2.3.2
COPY requirements.txt /requirements.txt
RUN pip install --user --upgrade pip
RUN pip install --no-cache-dir --user -r /requirements.txt

2.新建Airflow镜像

在同一文件夹中运行:

docker build . --tag pyrequire_airflow:2.3.2

3. 在您的 docker-compose.yaml 中使用新镜像

docker-compose.yaml下查找AIRFLOW_IMAGE_NAME中使用的 airflow 图像的名称。 改变:

image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.3.2}

至:

image: ${AIRFLOW_IMAGE_NAME:-pyrequire_airflow:2.3.2}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM