Почему я получаю ошибку "Соединение было сброшено" при попытке запустить мое приложение Django на контейнере Docker?

Я в миллионный раз пытаюсь контейнеризировать свое приложение Django и все время сталкиваюсь с проблемами подключения к mysql (или разрешениями?). Я все еще не очень понимаю, что происходит во время этого процесса, и постоянно сталкиваюсь с одной и той же общей ошибкой. Я серьезно собираюсь вырвать свои волосы. Может ли кто-нибудь указать, где я ошибаюсь при попытке установить контейнер?

Мои файлы конфигурации находятся в конце этого сообщения. Я нахожусь в корне моего проекта (где находится мой docker-compose.yml), и я пробую запустить docker-compose up --build. Но, я получаю эту ошибку

OK, я сталкивался с этим раньше, но всегда забываю, как я решил эту проблему в прошлом. Но я подозреваю, что это как-то связано с моим settings.py, который

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE'),
        'USER': os.environ.get('MYSQL_USER'),
        'PASSWORD': os.environ.get('MYSQL_PASSWORD'),
        'HOST': 'db',
        'PORT': 3308
    }
}

Я подозреваю, что ошибка возникает из-за моих настроек базы данных msyql в settings.py, в частности HOST. Поэтому вместо того, чтобы использовать адрес, на котором находится служба db, я попробовал изменить значение HOST с db на 172.17.0.2 (внутренний IP-адрес Docker).

Я получаю следующее из вывода контейнера:

sportsbet-web-1  |
sportsbet-web-1  | System check identified no issues (0 silenced).
sportsbet-web-1  | Watching for file changes with StatReloader

Итак, я думаю: "Ладно, круто. Может быть, я наконец-то заставил его работать". Я проверяю, запущены ли контейнеры, используя docker-compose ps, и, конечно, получаю следующее:

NAME                COMMAND                  SERVICE             STATUS              PORTS
sportsbet-db-1      "docker-entrypoint.s…"   db                  running             0.0.0.0:3308->3308/tcp, :::3308->3308/tcp
sportsbet-web-1     "python manage.py ru…"   web                 running             0.0.0.0:8000->8000/tcp, :::8000->8000/tcp

Я открываю браузер и набираю localhost:8000 в адресе, но сталкиваюсь с этой ошибкой: enter image description here

И это тот момент, когда я застреваю, не знаю, что делать, и просто начинаю пробовать случайное дерьмо, потому что я идиот. Я не понимаю. Что я делаю не так? Я знаю, что я что-то упускаю, но я даже не знаю, где начать искать. ГДЕ Я ОШИБАЮСЬ?!?????

Мои файлы конфигурации

У меня следующая конфигурация:

docker-compose.yml

version: '3.9'

services:
  db:
    image: mysql
    restart: always
    environment:
      - MYSQL_USER="milhouse"
      - MYSQL_PASSWORD="vanhouten"
      - MYSQL_DATABASE="sportsbet_dev"
      - MYSQL_ROOT_PASSWORD="password"
    volumes:
      - test_vol:/var/lib/mysql/
    ports:
      - 3308:3308
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  test_vol:

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE'),
        'USER': os.environ.get('MYSQL_USER'),
        'PASSWORD': os.environ.get('MYSQL_PASSWORD'),
        'HOST': 'db',
        'PORT': 3308
    }
}

... и Dockerfile

FROM python:3

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONBUFFERED=1
ENV MYSQL_PASSWORD=vanhouten
ENV MYSQL_USER=milhouse
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=sportsbet_dev

WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/

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