![](/img/trans.png)
[英]docker springboot only connects on postgres 5432 via docker-compose
[英]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.