python - Docker中的 Airflow initdb引发ImportError:无法导入名称 'import_string'

标签 python docker docker-compose airflow

我正在尝试将airflow jetty 化,我的Dockerfile看起来像这样

FROM python:3.5.2

RUN mkdir -p /src/airflow
RUN mkdir -p /src/airflow/logs
RUN mkdir -p /src/airflow/plugins
WORKDIR /src
COPY . .
RUN pip install psycopg2
RUN pip install -r requirements.txt
COPY airflow.cfg /src/airflow
ENV AIRFLOW_HOME /src/airflow
ENV PYTHONPATH "${PYTHONPATH}:/src"
RUN airflow initdb
EXPOSE 8080
ENTRYPOINT ./airflow-start.sh

而我的docker-compose.yml看起来像这样
version: "3"
services:
  airflow:
    container_name: airflow
    network_mode: host
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080

像通常一样显示$ docker-compose build的输出,执行每个步骤,然后
Step 12/14 : RUN airflow initdb
 ---> Running in 8b7ebe406978
[2020-04-21 10:34:21,419] {__init__.py:45} INFO - Using executor LocalExecutor
Traceback (most recent call last):
  File "/usr/local/bin/airflow", line 17, in <module>
    from airflow.bin.cli import CLIFactory
  File "/usr/local/lib/python3.5/site-packages/airflow/bin/cli.py", line 59, in <module>
    from airflow.www.app import cached_app
  File "/usr/local/lib/python3.5/site-packages/airflow/www/app.py", line 20, in <module>
    from flask_cache import Cache
  File "/usr/local/lib/python3.5/site-packages/flask_cache/__init__.py", line 24, in <module>
    from werkzeug import import_string
ImportError: cannot import name 'import_string'
ERROR: Service 'airflow' failed to build: The command '/bin/sh -c airflow initdb' returned a non-zero code: 1
postgres在主机系统上运行。
我尝试了多种方法,但是这种情况一直在发生。
我什至尝试了puckel/docker-airflow图片,并发生了相同的错误。
有人可以告诉我我在做什么错吗?
项目结构:
root
  -airflow_dags
  -Dockerfile
  -docker-compose.yml
  -airflow-start.sh
  -airflow.cfg

如果相关的话:airflow-start.sh

airflow.cfg中:
dags_folder = /src/airflow_dags/
sql_alchemy_conn = postgresql://airflow:airflow@localhost:5432/airflow

最佳答案

这很可能与werkzeug软件包的气流错误有关,或者您的要求可能使某些事情变得无聊。

我建议检查环境中使用的气流, flask 和werkzueg的版本。可能是您需要按照here固定flask或werkzueg的版本。

关于python - Docker中的 Airflow initdb引发ImportError:无法导入名称 'import_string',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61341894/

相关文章:

azure - 替换 Docker 镜像中的数据库连接字符串

ssl - 将 SSL 与 docker 容器一起使用

python - 在 Python 中将字符串转换为带小数的整数

python - python中从字符串到原始编码的face_recognition编码

python - 如何根据条件过滤 pandas 系列值

python - Scikit Scaler 和 Inversion 不会产生相同的数字?

docker - Docker Swarm 中任务的可发现性

docker - 如何使用Docker基于外部文件指定.env文件变量

docker - 没有到 docker 容器内主机的路由

docker - 在没有互联网连接的情况下运行 docker compose 文件