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, образы очень много весят, не рекомендую