簡體   English   中英

Airflow 通過 docker-compose 不斷嘗試訪問 sqlite 盡管配置了 postgres

[英]Airflow via docker-compose keeps trying to access sqlite although postgres configured

我嘗試設置一個 Dockerized airflow 實例,但無論我做什么(到目前為止..)它一直試圖訪問一些我不知道指令來自哪里的 sqlite3 數據庫。 我通過AIRFLOW__CORE__SQL_ALCHEMY_CONN甚至AIRFLOW_CONN_METADATA_DB指向所有可能(被認為)的 Postgres 實例。

啟動時的典型錯誤消息如下:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: job

完整的 docker-compose.yml:

version: '3'
x-airflow-common:
  &airflow-common
  image: apache/airflow:2.0.0
  environment:
    - AIRFLOW__CORE__EXECUTOR=LocalExecutor
    - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://postgres:postgres@db:9501/airflow
    - AIRFLOW_CONN_METADATA_DB=postgres+psycopg2://postgres:postgres@db:9501/airflow
    - AIRFLOW__CORE__FERNET_KEY=FB0o_zt4e3Ziq3LdUUO7F2Z95cvFFx16hU8jTeR1ASM=
    - AIRFLOW__CORE__LOAD_EXAMPLES=True
    - AIRFLOW__CORE__LOGGING_LEVEL=INFO
  volumes:
    - /home/x/docker/airflow/dags:/opt/airflow/dags
    - /home/x/docker/airflow/airflow-data/logs:/opt/airflow/logs
    - /home/x/docker/airflow/airflow-data/plugins:/opt/airflow/plugins
    - /home/x/docker/airflow/airflow-data/airflow.cfg:/opt/airlfow/airflow.cfg
  depends_on:
    - db

services:
  db:
    image: postgres:12
    #image: postgres:12.1-alpine
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=airflow
      - POSTGRES_PORT=9501
      - POSTGRES_HOST_AUTH_METHOD=trust
    ports:
      - 9501:9501
    command:
      - -p 9501

  airflow-init:
    << : *airflow-common
    container_name: airflow_init
    entrypoint: /bin/bash
    environment:
      - SQL_ALCHEMY_CONN=postgresql://postgres:postgres@db:9501/airflow
      - AIRFLOW_CONN_METADATA_DB=postgres://postgres:postgres@db:9501/airflow
    command:
      - -c
      - airflow users list || ( airflow db init &&
        airflow users create
          --role Admin
          --username airflow
          --password airflow
          --email airflow@airflow.com
          --firstname airflow
          --lastname airflow )
    restart: on-failure

  airflow-webserver:
    << : *airflow-common
    command: airflow webserver
    ports:
      - 9500:8080
    container_name: airflow_webserver
    environment:
      - AIRFLOW_USERNAME=airflow
      - AIRFLOW_PASSWORD=airflow
      - SQL_ALCHEMY_CONN=postgresql://postgres:postgres@db:9501/airflow
      - AIRFLOW_CONN_METADATA_DB=postgres://postgres:postgres@db:9501/airflow
    restart: always

  airflow-scheduler:
    << : *airflow-common
    command: airflow scheduler
    container_name: airflow_scheduler
    environment:
      - SQL_ALCHEMY_CONN=postgresql://postgres:postgres@db:9501/airflow
      - AIRFLOW_CONN_METADATA_DB=postgres://postgres:postgres@db:9501/airflow
    restart: always

按照這個 docker-compose.yaml 文件解決:

https://github.com/apache/airflow/blob/master/docs/apache-airflow/start/docker-compose.yaml

而不是嘗試調整 postgres(和 redis)的端口,而是使用“公開”選項,這避免了與同一主機上的其他容器發生沖突。

所以不是

 environment: 
   POSTGRES_PORT: 9501
 ports:
   - 9501:9501

但是:使用默認端口(在內部)運行它,不要嘗試在外部共享它們:

 expose: 
   - 5432

仍然不確定使用更高端口有什么問題。 當配置的 DB 由於某種原因無法連接時,它可能是 sqlite 的默認回退。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM