我正在使用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确实安装成功,但是当我通过简单的dags导入运行网络服务器时,我仍然得到错误
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'
你能试试吗?
RUN pip3 install pymongo
并报告回来。如果您有多个版本的Python,可能会发生这种情况。 pip3将确保您安装Python 3.x的模块。
当您构建puckel / Airflow Docker图像时,是否在构建参数中将mongo
添加到AIRFLOW_DEPS
?
例如docker build --rm --build-arg AIRFLOW_DEPS="mongo" -t puckel/docker-airflow .
我有类似的mysql钩子经验并解决了。
我的经验是检查是否可以先在纯python环境中导入模块。
有一段时间,你安装的包不是想要的气流。
对于您的情况,您可以检查以下步骤。 1.跳入docker容器docker exec -it / bin / bash 2.启动python假设你已经使用了python 3.X版python 3.检查python中的模块enviromnet import pymonggo#other test script if if to check。如果您遇到错误,请先在python环境中解决,然后再回到气流。
================================================== =====我只是仔细检查了气流github源代码,并意识到mongo db不是原始源代码中的默认钩子。
在这种情况下,你可能需要进一步研究pymongo包来研究如何安装和编译它以及相关的依赖。
我遇到了同样的症状。我通过将&& pip install pymongo \
添加到puckel/airflow:Dockerfile
,靠近其他pip install
命令并重建图像来修复它。
这是我尝试过的没有解决问题的方法:
pymongo
添加到requirements.txt
并挂载文件。我验证了模块是通过docker-compose
启动中的日志消息按预期加载的,并连接到我的worker和webserver实例,并且看到该模块在Python环境中使用help("modules")
可用但该模块不可用于我的Airflow DAG--build-arg PYTHON_DEPS="pymongo"
作为参数添加到我的docker build
命令中。 (注意:对于pymongo
以外的模块,这一步修复了module not found
错误,但不适用于pymongo
。实际上,当我设置此时,我没有看到pymongo
中安装docker build
的任何日志记录)