Почему я получаю ошибку "Соединение было сброшено" при попытке запустить мое приложение 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
в адресе, но сталкиваюсь с этой ошибкой:
И это тот момент, когда я застреваю, не знаю, что делать, и просто начинаю пробовать случайное дерьмо, потому что я идиот. Я не понимаю. Что я делаю не так? Я знаю, что я что-то упускаю, но я даже не знаю, где начать искать. ГДЕ Я ОШИБАЮСЬ?!?????
Мои файлы конфигурации
У меня следующая конфигурация:
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/