簡體   English   中英

無法在 Docker 容器中啟動 Django 服務器 - TypeError:“NoneType”類型的參數不可迭代

[英]Unable to start Django server within Docker container - TypeError: argument of type 'NoneType' is not iterable

因此,我使用 VSCode 的 Remote - Container 擴展在 Docker 中創建了一個開發容器。 配置如下所示:

devcontainer.json 文件:

 // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: // https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/python-3-postgres // Update the VARIANT arg in docker-compose.yml to pick a Python version { "name": "Python 3 & PostgreSQL", "dockerComposeFile": "docker-compose.yml", "service": "app", "workspaceFolder": "/workspace", // Configure tool-specific properties. "customizations": { // Configure properties specific to VS Code. "vscode": { // Set *default* container specific settings.json values on container create. "settings": { "python.defaultInterpreterPath": "/usr/local/bin/python", "python.linting.enabled": true, "python.linting.pylintEnabled": true, "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", "python.formatting.blackPath": "/usr/local/py-utils/bin/black", "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint", "python.testing.pytestPath": "/usr/local/py-utils/bin/pytest" }, // Add the IDs of extensions you want installed when the container is created. "extensions": [ "ms-python.python", "ms-python.vscode-pylance" ] } }, // Use 'forwardPorts' to make a list of ports inside the container available locally. // This can be used to network with other containers or the host. "forwardPorts": [5000, 5432, 8000], // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "pip install --user poetry" // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // "remoteUser": "vscode" }

docker-compose.yml 文件:

> version: '3.8'
> 
> services:   app:
>     build:
>       context: ..
>       dockerfile: .devcontainer/Dockerfile
>       args:
>         # Update 'VARIANT' to pick a version of Python: 3, 3.10, 3.9, 3.8, 3.7, 3.6
>         # Append -bullseye or -buster to pin to an OS version.
>         # Use -bullseye variants on local arm64/Apple Silicon.
>         VARIANT: 3.9-bullseye
>         # Optional Node.js version to install
>         NODE_VERSION: "lts/*"
> 
>     volumes:
>       - ..:/workspace:cached
> 
>     # Overrides default command so things don't shut down after the process ends.
>     command: sleep infinity
> 
>     # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
>     network_mode: service:db
>     # Uncomment the next line to use a non-root user for all processes.
>     # user: vscode
> 
>     # Use "forwardPorts" in **devcontainer.json** to forward an app port locally.
>     # (Adding the "ports" property to this file will not forward from a Codespace.)
> 
>   db:
>     image: postgres:latest
>     restart: unless-stopped
>     volumes:
>       - postgres-data:/var/lib/postgresql/data
>     environment:
>       POSTGRES_USER: postgres
>       POSTGRES_DB: postgres
>       POSTGRES_PASSWORD: postgres
>     # Add "forwardPorts": ["5432"] to **devcontainer.json** to forward PostgreSQL locally.
>     # (Adding the "ports" property to this file will not forward from a Codespace.)
> 
> volumes:   postgres-data: null

Dockerfile

> # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye,
> 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster ARG VARIANT=3-bullseye FROM
> mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
> 
> ENV PYTHONUNBUFFERED 1
> 
> # [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 ARG NODE_VERSION="none" RUN if [ "${NODE_VERSION}" != "none" ]; then su
> vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install
> ${NODE_VERSION} 2>&1"; fi
> 
> # [Optional] If your requirements rarely change, uncomment this section to add them to the image.
> # COPY requirements.txt /tmp/pip-tmp/
> # RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
> #    && rm -rf /tmp/pip-tmp
> 
> # [Optional] Uncomment this section to install additional OS packages.
> # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
> #     && apt-get -y install --no-install-recommends <your-package-list-here>

我選擇手動安裝依賴項,因為它們列在 Poetry 實例中。 萬一我無法成功,我將 Poetry 本身安裝為故障保險。

安裝依賴項(同時使用'pip3 install'和'poetry install')然后嘗試運行“python3 manage.py runserver”或“poetry run python3 manage.py runserver”后,我收到以下錯誤:

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/threading.py", line 973, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.9/threading.py", line 910, in run
    self._target(*self._args, **self._kwargs)
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 118, in inner_run
    self.check(display_num_errors=True)
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/management/base.py", line 419, in check
    all_issues = checks.run_checks(
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/checks/registry.py", line 76, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/checks/urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/checks/urls.py", line 23, in check_resolver
    return check_method()
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/urls/resolvers.py", line 417, in check
    messages.extend(check_resolver(pattern))
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/core/checks/urls.py", line 23, in check_resolver
    return check_method()
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/urls/resolvers.py", line 419, in check
    return messages or self.pattern.check()
  File "/root/.cache/pypoetry/virtualenvs/backend-xS3fZVNL-py3.9/lib/python3.9/site-packages/django/urls/resolvers.py", line 282, in check
    if '(?P<' in route or route.startswith('^') or route.endswith('$'):
TypeError: argument of type 'NoneType' is not iterable

我正在運行的機器是 Macbook Air 2020,它正在運行此應用程序所在的 Docker 實例。

我找到了解決我的問題的方法:

在我的 urls.py 文件中,我將管理 url 設置為

path(os.getenv('ADMIN_URL') , admin.site.urls)

但是我的 .env 不在我實例化的容器中,也沒有在 docker-compose 文件中設置 env 變量,如上所示。 因此該路線顯示為“None”或“NoneType”。

一旦我糾正了這個問題,Django 服務器就成功啟動了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM