【问题标题】:Django: module not found while running in Docker containerDjango:在 Docker 容器中运行时找不到模块
【发布时间】:2019-07-01 10:32:06
【问题描述】:

我在 Docker 容器中运行一个 Django 项目,我想添加一个模块(具体来说,django-prometheus

我成功运行了:pip install django-prometheusdocker run -p 9090:9090 prom/prometheus,并对我的 settings.pyurls.py 文件进行了必要的更改,如 specified in the README

然后我重建项目并重新启动它,但它给了我错误ModuleNotFoundError: No module named 'django_prometheus'

(完整的错误报告:

Traceback (most recent call last):
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
api_1           |     worker.init_process()
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
api_1           |     self.load_wsgi()
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
api_1           |     self.wsgi = self.app.wsgi()
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
api_1           |     self.callable = self.load()
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
api_1           |     return self.load_wsgiapp()
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
api_1           |     return util.import_app(self.app_uri)
api_1           |   File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
api_1           |     __import__(module)
api_1           |   File "/usr/src/app/project/wsgi.py", line 16, in <module>
api_1           |     application = get_wsgi_application()
api_1           |   File "/usr/local/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
api_1           |     django.setup(set_prefix=False)
api_1           |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
api_1           |     apps.populate(settings.INSTALLED_APPS)
api_1           |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 89, in populate
api_1           |     app_config = AppConfig.create(entry)
api_1           |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
api_1           |     module = import_module(entry)
api_1           |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
api_1           |     return _bootstrap._gcd_import(name[level:], package, level)
api_1           | ModuleNotFoundError: No module named 'django_prometheus'
api_1           | [2019-07-01 12:19:36 +0200] [16] [INFO] Worker exiting (pid: 16)

)

在我添加此模块之前,项目运行良好,我缺少什么?

【问题讨论】:

  • 你说你跑了pip install。通常我会将库依赖项添加到我的setup.py/requirements.txt,然后重新运行docker build。您是这样做的,还是只在您的开发环境中安装该库?
  • 我只在我的环境中安装了它,我不确定这个项目中是否有setup.py/requirements.txt(我不是创建者)但我会看看等效的是并添加它
  • 请提供Dockerfile源

标签: python django docker prometheus


【解决方案1】:

在你的 Dockerfile 中,你应该确保你有一个 pip install 命令。请看下面的例子。 prometheus 模块应该列在 requirements.txt 文件中。

RUN apt-get update \
&& apt-get install -y --no-install-recommends software-properties-common \
&& apt-get update \
&& apt-get install -q -y --no-install-recommends python3 python3-dev python3-pip python3-setuptools python3-wheel gcc \
&& apt-get install -q -y vim \
&& apt-get clean 

ADD requirements.txt /app/requirements.txt
RUN pip3 install -r /app/requirements.txt

# Add the application source code.
ADD . /app

【讨论】:

  • 你不想先ADD . /app 然后RUN pip 3 install -r ...(假设 requirements.txt 文件是项目的一部分)?
  • 谢谢,我找到了 Dockerfile 和依赖项,我得到了它的工作 :)
  • 您经常希望将需求文件与主应用程序代码分开复制。通常,应用程序代码更改频繁,需求更改较少,并且此顺序允许利用 Docker 层缓存来避免重复安装包。
猜你喜欢
  • 2021-07-11
  • 2021-10-08
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多