Python Docker ModuleNotFoundError,即使代码中不再包含此模块
我已经编写了一个FlaskAPI,我想在docker容器中运行它。但是,Python Docker ModuleNotFoundError,即使代码中不再包含此模块,python,docker,flask-cors,Python,Docker,Flask Cors,我已经编写了一个FlaskAPI,我想在docker容器中运行它。但是,错误:在导入“api”时,引发了一个ImportError:不断出现,即使找不到的模块不再在代码中 错误发生后,我停止、删除并重新启动Docker容器以运行Flask Api: docker stop privacy_api docker rm privacy_api docker build -t privacy_api_image . docker run -dit --name=privacy_api -e FLASK
错误:在导入“api”时,引发了一个ImportError:
不断出现,即使找不到的模块不再在代码中
错误发生后,我停止、删除并重新启动Docker容器以运行Flask Api:
docker stop privacy_api
docker rm privacy_api
docker build -t privacy_api_image .
docker run -dit --name=privacy_api -e FLASK_APP=api.py -p 5000:5000 -v main_api:/app --network privacy-network privacy_api_image
5963fb7fa194d6710ae5e713d2060bd0be5338b04636bf306b78bda4bb596524
docker logs -f privacy_api
但是,这是我得到的输出:
* Serving Flask app "api.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
Usage: flask run [OPTIONS]
Error: While importing "api", an ImportError was raised:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/app/api.py", line 2, in <module>
from flask_cors import CORS, cross_origin
ModuleNotFoundError: No module named 'flask_cors'
这是Dockerfile
:
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install -r requirements-main-api.txt
EXPOSE 5000
ENTRYPOINT ["flask"]
CMD ["run", "--host=0.0.0.0"]
flask==1.1.1
mysqlclient==1.4.6
selenium
requests
pytz
这是requirements-main-api.txt文件
:
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install -r requirements-main-api.txt
EXPOSE 5000
ENTRYPOINT ["flask"]
CMD ["run", "--host=0.0.0.0"]
flask==1.1.1
mysqlclient==1.4.6
selenium
requests
pytz
我不理解这个错误,因为Cors不再在api.py文件中
你有什么想法吗?谢谢你的帮助 您需要在requirements-main-api.txt中添加
Flask Cors==1.10.3
如果已删除此库的所有依赖项调用,请确保保存该文件,并使用--无缓存标志再次运行dockerfile
您还可以使用docker rmi
删除以前的映像,如果您想清理docker守护程序系统:docker system prune-a
您需要将Flask Cors==1.10.3
添加到您的requirements-main-api.txt中
如果已删除此库的所有依赖项调用,请确保保存该文件,并使用--无缓存标志再次运行dockerfile
您还可以使用docker rmi
删除以前的映像,如果您想清理docker守护程序系统:docker system prune-a
删除-v main\u api:/app
选项
这样做的目的是将主api
命名卷的内容装载到/app
上。即使Dockerfile更新了映像中的代码,此运行时选项也会隐藏该更改并使用卷的现有内容
这在过去显然是有效的,因为第一次(仅)运行容器时,图像的内容被复制到一个新的空卷中。如果卷中已经有内容,Docker将不会覆盖潜在的重要用户数据,因此如果您尝试将应用程序代码放入命名卷,您将运行代码的固定旧版本。删除-v main\u api:/app
选项
这样做的目的是将主api
命名卷的内容装载到/app
上。即使Dockerfile更新了映像中的代码,此运行时选项也会隐藏该更改并使用卷的现有内容
这在过去显然是有效的,因为第一次(仅)运行容器时,图像的内容被复制到一个新的空卷中。如果卷中已有内容,Docker将不会覆盖潜在的重要用户数据,因此如果您尝试将应用程序代码放入命名卷,您将运行一个固定的旧版本的代码。当我没有在api.py
中导入它时,为什么我需要添加Flask Cors==1.10.3
?似乎您确实在第2行导入了它……如果您发布的代码(您在此处显示的api.py文件)也是“/app/api.py”,则会出现错误文件…然后删除了第2行,该行以前是“从flask_cors import cors,cross_origin”如果您删除了它,那么您不再需要Flask COR,您也可以从我以前的要求中删除它,但它不再包含在api.py文件中,因此我很困惑,为什么即使使用--无缓存扁平附件,它仍然会给我错误。对于一个明显的问题,对不起,您是否保存了新的api.py?如果您不介意系统中已有的图像,您也可以删除以前的图像docker rmi privacy\u api\u image
或者更粗鲁的方式:docker system prune--all
谢谢,我已经保存了它,并且已经对docker系统进行了删减,但是我会尝试你为什么我需要添加Flask Cors==1.10.3
,而我没有在api.py
中导入它?看起来你确实在第2行导入了它……如果你发布的代码(你在这里显示的api.py文件)也是“/app/api.py”,那么错误会说什么文件…然后删除了第2行,该行以前是“从flask_cors import cors,cross_origin”如果您删除了它,那么您不再需要Flask COR,您也可以从我以前的要求中删除它,但它不再包含在api.py文件中,因此我很困惑,为什么即使使用--无缓存扁平附件,它仍然会给我错误。对于一个明显的问题,对不起,您是否保存了新的api.py?如果你不介意系统中已有的图像,你也可以删除以前的图像docker rmi privacy\u api\u image
或者更粗鲁的方式:docker system prune——谢谢,我已经保存了它,docker system prune已经删除了,但无论如何我都会在那里尝试你,我可以共享应用程序的内容吗?我试图从那里获取已部署容器的源代码,这样我就可以共享应用程序的内容了?我试图获取已部署容器的源代码