简体   繁体   English

无法在 Docker 容器中启动 Django 服务器 - TypeError:“NoneType”类型的参数不可迭代

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

So I've created a dev-container within Docker using VSCode's Remote - Container extension.因此,我使用 VSCode 的 Remote - Container 扩展在 Docker 中创建了一个开发容器。 The config looks as follows:配置如下所示:

devcontainer.json file: 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 file: 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 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>

I opted to install dependencies manually as they are listed within a Poetry instance.我选择手动安装依赖项,因为它们列在 Poetry 实例中。 In case I couldn't succeed with that, I installed Poetry itself as a fail-safe.万一我无法成功,我将 Poetry 本身安装为故障保险。

After installing the dependencies (using both 'pip3 install' and 'poetry install') and then trying to run "python3 manage.py runserver" OR "poetry run python3 manage.py runserver", I get the following error:安装依赖项(同时使用'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

The machine I'm running is Macbook Air 2020, which is running the Docker instance this application is in.我正在运行的机器是 Macbook Air 2020,它正在运行此应用程序所在的 Docker 实例。

I've found the solution to my problem:我找到了解决我的问题的方法:

Within my urls.py file, I had the admin url's setting as在我的 urls.py 文件中,我将管理 url 设置为

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

But my .env was not within the container I instantiated, neither were the env variables set in the docker-compose file, as shown above.但是我的 .env 不在我实例化的容器中,也没有在 docker-compose 文件中设置 env 变量,如上所示。 So that route was showing as "None" or "NoneType".因此该路线显示为“None”或“NoneType”。

Once I corrected this, the Django server started successfully.一旦我纠正了这个问题,Django 服务器就成功启动了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 TypeError:“ NoneType”类型的参数不可迭代python - TypeError: argument of type 'NoneType' is not iterable python Python聊天机器人“ TypeError:&#39;NoneType&#39;类型的参数不可迭代” - Python chatbot “TypeError: argument of type 'NoneType' is not iterable” 国际象棋程序中的“ TypeError:&#39;NoneType&#39;类型的参数不可迭代” - “TypeError: argument of type 'NoneType' is not iterable” in chess program TypeError:if语句后,不可迭代“ NoneType”类型的参数 - TypeError: argument of type 'NoneType' is not iterable after an if statement Python游戏| TypeError:“ NoneType”类型的参数不可迭代 - Python Game | TypeError: argument of type 'NoneType' is not iterable Flask TypeError:类型为&#39;NoneType&#39;的参数不可迭代 - Flask TypeError: argument of type 'NoneType' is not iterable &#39;NoneType&#39; 类型的参数对于 django 字符串 &quot;&quot; 不可迭代 - argument of type 'NoneType' is not iterable for django string " " TypeError:“NoneType”类型的参数在 Jarvis AI 中不可迭代 - TypeError: argument of type 'NoneType' is not iterable in Jarvis A.I 系统路径检查具有TypeError:“ NoneType”类型的参数不可迭代 - System path check has TypeError: argument of type 'NoneType' is not iterable Django TypeError:“PosixPath”类型的参数不可迭代 - Django TypeError: argument of type 'PosixPath' is not iterable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM