我目前正在将Docker与puckel/Airflow结合使用以运行Airflow 我已成功安装pymongo,但是在调用pymongo的导入时,仍然找不到该模块。
在重建之前,我在其他RUN上方的Dockerfile中添加了以下代码
第一次尝试
RUN pip install pymongo
第二次尝试
RUN pip install pymongo -U
我用它们建造了
docker build --rm -t puckel/docker-airflow .
Pymongo确实安装成功,但是当我通过简单的dag导入运行Web服务器时,仍然出现错误
File "/usr/local/lib/python3.6/site-packages/airflow/contrib/hooks/mongo_hook.py", line 22, in <module>
from pymongo import MongoClient
ModuleNotFoundError: No module named 'pymongo'
答案 0 :(得分:0)
可以尝试
RUN pip3 install pymongo
然后报告。如果您有多个版本的Python,则可能会发生。 pip3将确保您正在安装适用于Python 3.x的模块。
答案 1 :(得分:0)
构建puckel / Airflow Docker映像时,是否在构建参数中将mongo
添加到AIRFLOW_DEPS
?
例如docker build --rm --build-arg AIRFLOW_DEPS="mongo" -t puckel/docker-airflow .
答案 2 :(得分:0)
我对mysql hook有类似的经验并得到解决。
我的经验是检查模块是否可以首先在纯python环境中导入。
有时,您安装的包装不是所需的气流。
对于您的情况,您可以签入以下步骤。 1.跳进Docker容器 docker exec -it / bin / bash 2.假设您已经使用python 3.X版本,则启动python 蟒蛇 3.检查python enviromnet中的模块 进口pymonggo #其他测试脚本(如果要检查)。 如果遇到错误,请先在python环境中解决该问题,然后再返回气流。
================================================ ======== 我只是仔细检查了气流github源代码,意识到mongo db不是原始源代码中的默认钩子。
在这种情况下,您可能需要进一步进入pymongo软件包,以研究如何安装和编译它以及相关的依赖项。
答案 3 :(得分:0)
我遇到了同样的症状。我通过在其他&& pip install pymongo \
命令附近添加puckel/airflow:Dockerfile
到pip install
来修复它,并重建了图像。
这是我尝试无法解决的问题:
pymongo
添加到requirements.txt
并装入文件。我通过启动docker-compose
时的日志消息并连接到我的worker和Webserver实例,并通过使用help("modules")
来查看模块是否在Python环境中可用,来验证模块是否按预期加载。适用于我的Airflow DAG --build-arg PYTHON_DEPS="pymongo"
作为参数添加到我的docker build
命令中。 (注意:对于pymongo
以外的模块,此步骤修复了module not found
错误,但没有解决pymongo
的错误。实际上,在此期间,我没有看到安装任何pymongo
的日志记录docker build
,当我设置此项时答案 4 :(得分:0)
我通过在根目录中复制requirements.txt
文件来解决此问题。
实际上,在puckel/docker-airflow
的Dockerfile中,如果文件存在,它会从/requirements.txt
执行entrypoint.sh pip install软件包。因此,我们确定我们的软件包已安装。
您可以添加Dockerfile
:
COPY ./requirements.txt /requirements.txt
或
在docker-compose.yml
中向您的容器添加一个卷:
volumes:
- ./requirements.txt:/requirements.txt