python - 将Django Python应用程序放入Docker容器后获得404错误消息

标签 python django docker http-status-code-404

我正在尝试从Docker container获取一些模板信息以显示在提供服务的网页上。它正在使用uWSGI。模板的名称是base.html
base.html中存在与static directory文件关联的“装饰”。更具体地说,它位于static/wforms/assets目录中。
以下是模板中assets目录的使用方式。

<link href="{% static 'wforms/assets/global/plugins/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css" />
    <link href="{% static 'wforms/assets/global/plugins/simple-line-icons/simple-line-icons.min.css' %}" rel="stylesheet" type="text/css" />
    <link href="{% static 'wforms/assets/global/plugins/bootstrap/css/bootstrap.min.css' %}" rel="stylesheet" type="text/css" />

每当我转到使用base.html模板的页面时,都找不到装饰,并且结果网页是一团糟。在PyCharm中一切正常。将所有内容移至Docker容器中的目录结构时会发生问题。以下是PyCharm中的目录结构。

enter image description here

我这样启动容器:
docker run -it --rm -p 8888:8888  -v /home/dockcclubdjango/apps/wforms/assets:/code/backendworkproj/static/wforms/assets --name my-running-app my-python-app

作为仅供引用, / home / dockcclubdjango / apps / wforms / assets 确实存在,并且其中包含正确的信息。

然后,我尝试转到Web主页。该页面显示出来,但是所有“装饰”都不存在。因此,该页面看起来有些混乱。像这样:

enter image description here

我查看页面的源代码,并在下面看到以下内容。
<link href="/static/wforms/assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.css" rel="stylesheet" type="text/css" />  <<< got 404 error in log file
    <link href="/static/wforms/assets/global/plugins/morris/morris.css" rel="stylesheet" type="text/css" />                                  <<< got 404 error in log file
    <link href="/static/wforms/assets/global/plugins/fullcalendar/fullcalendar.min.css" rel="stylesheet" type="text/css" />                  <<< got 404 error in log file

我注意到找不到与assets目录关联的任何项目。 列出的每个项目在日志中都会获得一个404 Error

因此,我尝试了以下操作以不同的方式启动Docker Container(如下所示),但是它不起作用
docker run -it --rm -p 8888:8888  -v /home/dockcclubdjango/apps/wforms/assets:/static/wforms/assets --name my-running-app my-python-app

我开始查看settings.py文件,但不确定可能出什么问题。

settings.py文件(简化后简化了-专注于STATIC目录
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')

STATIC_DIR = os.path.join(BASE_DIR, 'static')

MEDIA_DIR = os.path.join(BASE_DIR, 'media')

DEBUG = True

ROOT_URLCONF = 'backendworkproj.urls'

WSGI_APPLICATION = 'backendworkproj.wsgi.application'

SESSION_COOKIE_AGE = 10*60


STATIC_URL = '/static/'
STATIC_ROOT =  os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
     os.path.join(BASE_DIR, "static"),
]

STATIC_ROOT = "/var/www/cclub.com/static/"

MEDIA_ROOT = MEDIA_DIR

我看到了这个线
Docker Django 404 for web static files, but fine for admin static files

并进行了建议的更改,但仍然无法正常工作(页面上的“装饰”始终显示404错误。不确定接下来要看什么。我在这里缺少什么?

TIA

更新资料

@PekosoG-当我使用下面的建议时,运行 docker build -t my-python-app时得到以下信息。
 ---> Running in fde638af597f
Traceback (most recent call last):
  File "/code/backendworkproj/manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 199, in handle
    collected = self.collect()
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 114, in collect
    for finder in get_finders():
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/finders.py", line 264, in get_finders
    yield get_finder(finder_path)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/finders.py", line 277, in get_finder
    return Finder()
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/finders.py", line 66, in __init__
    "The STATICFILES_DIRS setting should "
django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting

更新资料

恢复为旧设置(因为上述解决方案无法解决问题)

最佳答案

我有一个类似的问题,我这样解决:

设置文件

STATIC_URL = '/static/'
STATIC_FOLDER = 'static'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,STATIC_FOLDER),
]

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

而且当我运行manage.py命令初始化时,我添加了这个
python manage.py collectstatic -link --noinput

关于python - 将Django Python应用程序放入Docker容器后获得404错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956902/

相关文章:

python - 在 Django urlpatterns 中省略 'url(' 有什么意义

docker - 在 Dockerfile 中运行 Docker pull 命令

docker - 无法停止 docker 容器

python - 在给定的 conda 环境中执行 python 脚本的最佳方式

python - 如何在 Kivy Spinner 中通过单击值来更改图像的来源?

python - celery 中 bind = True 关键字的含义是什么?

linux - 'Kubectl' 在使用 docker 安装时抛出错误 'failed to negotiate an api version'

python - 如何使 Tornado 中的 SQLAlchemy 异步?

python - 在 ZSh 中找不到 Anaconda?

python - Django html 的模板和 View 问题