我正在尝试将airflow
进行码头化,我的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
答案 0 :(得分:1)
如果可能的话,在不接触docker的情况下运行代码...直接在主机上运行它...当然,这意味着您的主机(您的笔记本电脑或执行命令的任何地方,都可能是远程VPS debian机器)与您的Dockerfile具有相同的操作系统,在这种情况下,我看到FROM python:3.5.2
实际上正在使用debian 8
完成上述操作后,启动了一个玩具容器,该容器尚未执行任何操作,您可以登录该容器手动运行命令以帮助进行故障排除...因此,请使用以下作为该玩具容器的Dockerfile
FROM python:3.5.2
CMD ["/bin/bash"]
所以现在发出这个
docker build --tag saadi_now . # creates image saadi_now
现在启动该图像
docker run -d saadi_now sleep infinity # launches container
docker ps # lets say its container_id is b91f8cba6ed1
现在登录到该正在运行的容器
docker exec -ti b91f8cba6ed1 bash
很酷,所以您现在位于docker容器中,因此运行最初在真实Dockfile中的命令...这有时使故障排除更加容易
将这个真正的Dockerfile中的实际命令一步一步地添加到这个玩具Dockerfile中,然后重做上面的操作,直到发现潜在的问题为止
答案 1 :(得分:0)
这很可能与werkzeug程序包中的气流错误有关,或者您的要求可能会破坏某些东西。
我建议检查环境中使用的气流,烧瓶和werkzueg的版本。可能您需要按照here的方式固定flask或werkzueg的版本。