Docker-compose up ошибка Django|Postgres

Dockerfile

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

docker-compose.yml

version: "3.9"
   
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_NAME=DjangoDB
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=dias2502
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    environment:
      - POSTGRES_NAME=DjangoDB
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=dias2502
    depends_on:
      - db

requirements:

Django>=3.0,<4.0
psycopg2>=2.8

При docker-compose up :

Attaching to siteauth-db-1, siteauth-web-1
siteauth-web-1  | Watching for file changes with StatReloader
siteauth-web-1  | Exception in thread django-main-thread:
siteauth-web-1  | Traceback (most recent call last):
siteauth-web-1  |   File "/usr/local/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
siteauth-web-1  |     self.run()
siteauth-web-1  |   File "/usr/local/lib/python3.10/threading.py", line 946, in run
siteauth-web-1  |     self._target(*self._args, **self._kwargs)
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
in inner_run
siteauth-web-1  |     autoreload.raise_last_exception()
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 87, in raise_last_exception      
siteauth-web-1  |     raise _exception[1]
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 398, in executesiteauth-web-1  |     autoreload.check_errors(django.setup)()
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
siteauth-web-1  |     fn(*args, **kwargs)
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
siteauth-web-1  |     apps.populate(settings.INSTALLED_APPS)
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/apps/registry.py", line 116, in populate
siteauth-web-1  |     app_config.import_models()
siteauth-web-1  |   File "/usr/local/lib/python3.10/site-packages/django/apps/config.py", line 304, in import_models
siteauth-web-1  |     self.models_module = import_module(models_module_name)
siteauth-web-1  |   File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
siteauth-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
siteauth-web-1  |   File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
siteauth-web-1  |   File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
siteauth-web-1  |   File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
siteauth-web-1  |   File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
siteauth-web-1  |   File "<frozen importlib._bootstrap_external>", line 883, in exec_module
siteauth-web-1  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
siteauth-web-1  |   File "/usr/src/siteAuth/catalog/models.py", line 1, in <module>
siteauth-web-1  |     from asyncio.windows_events import NULL
siteauth-web-1  |   File "/usr/local/lib/python3.10/asyncio/windows_events.py", line 6, in <module>
siteauth-web-1  |     raise ImportError('win32 only')
siteauth-web-1  | ImportError: win32 only

Нужно установить WSL2 https://docs.microsoft.com/ru-ru/windows/wsl/install и установить дистрибутив Linux, в моем случае это был Ubuntu из Microsoft Store.
Запустить консоль Ubuntu

mkdir <name>   
code <name>

После чего у вас запуститься Visual Studio Code и предложит установить необходимые расширения:

  • Remote - WSL
  • Remote - Containers

Проверьте, что в приложении Docker у вас выбран Linux контейнер, а не Windows ( ПКМ по иконке Docker, должно быть Switch to Windows containers… ) и в настройках выбрано <Use the WSL 2 based engine> и выбран ваш дистрибутив Linux ( Resoursec -> WSL Integration ).
P.S. Пробовал контейнеры Windows, образы очень много весят, не рекомендую

Вернуться на верх