ModuleNotFoundError:Docker和Airflow中没有名为“ pymongo”的模块

时间:2019-04-24 17:33:23

标签: python mongodb docker docker-compose airflow

我目前正在将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'

5 个答案:

答案 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:Dockerfilepip install来修复它,并重建了图像。

这是我尝试无法解决的问题:

  1. pymongo添加到requirements.txt并装入文件。我通过启动docker-compose时的日志消息并连接到我的worker和Webserver实例,并通过使用help("modules")来查看模块是否在Python环境中可用,来验证模块是否按预期加载。适用于我的Airflow DAG
  2. --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