首页 > 解决方案 > Airflow 2 / Docker:在 docker-compose.yml 中添加自定义网络失败

问题描述

我已经使用 docker-compose 安装了气流 2.0.2,如https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html中所述。使用的 docker-compose.yml 可以在这里找到:https ://airflow.apache.org/docs/apache-airflow/2.0.2/docker-compose.yaml

我想执行一个 DAG,它通过 API 下载一些数据并将其发送到在另一个 docker 容器(在另一个 docker-compose 管道中定义)中运行的 Kafka 服务器。到目前为止(不使用气流),我为 kafka / zookeper 容器使用了自定义 docker 网络;这就是为什么我还想将气流 docker 容器添加到该网络的原因。

因此,我将以下内容添加到气流的 docker-compose.yml 中:

networks:
  app-tier:
    driver: bridge
    name: app-tier

此外,我将networks参数包括在内x-airflow-common,如下所示:

version: '3'
x-airflow-common:
  &airflow-common
  build: .
  image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.0.2}
  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: 'false'
    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
  networks:
    - app-tier

但是,当启动我的 docker-compose 管道时,除 Postgres 和 Redis(worker、webserver、flower、scheduler)之外的所有容器的健康检查都失败,并显示以下消息:

daniel@Yoga:~/Schreibtisch/Projekte/db/airflow_neu$ docker logs airflowWorker
BACKEND=postgresql+psycopg2 DB_HOST=postgres

DB_PORT=5432 .....................错误!已达到最大重试次数 (20)。

上次检查结果: $ run_nc 'postgres' '5432' Traceback (最近一次调用最后一次): File "", line 1, in socket.gaierror: [Errno -3] 名称解析临时失败 Can't parse as an IP address

我将此解释为无法再访问 Postgres 数据库,但我不知道如何解决此问题。

标签: postgresqldockerdocker-composeairflow

解决方案


通过包含external标签解决了它:

networks:
  default:
    external: true
    name: app-tier

推荐阅读