Django не подключается к контейнеру mysql на порту 3307, а в файле docker compose указано 3307:3306 [duplicate]
docker-compose.yaml
services:
db:
image: mysql:9.0.1
container_name: db_mysql_container
environment:
MYSQL_DATABASE: backend
MYSQL_USER: asdf
MYSQL_PASSWORD: asdf
MYSQL_ROOT_PASSWORD: asdf
ports:
- '3307:3306'
api:
build: .
container_name: django_container
command: bash -c "pip install -q -r requirements.txt &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/app
ports:
- '8000:8000'
depends_on:
- db
настройки джанго
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "backend",
'USER': "asdf",
'PASSWORD': "asdf",
'HOST': "db",
'PORT': "3307",
}
}
Остальная часть моего файла настроек django - это то, что используется по умолчанию. Весь проект django - это только то, что вы начинаете с команды django-admin startproject
, плюс зависимость mysqlclient.
Вот мой Dockerfile, ничего особенного не происходит:
# Use an official Python runtime as a parent image
FROM python:3.12
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set the working directory
WORKDIR /app
# Install dependencies
COPY requirements.txt /app/
# Copy the project code into the container
COPY . /app/
requirements.txt:
asgiref==3.8.1
Django==5.1
mysqlclient==2.2.4
sqlparse==0.5.1
Когда я открываю db, жду, а затем открываю api, я получаю следующее:
django.db.utils.OperationalError: (2002, "Невозможно подключиться к серверу на 'db' (115)")
Если я изменю свой docker-compose.yaml на следующий:
services:
db:
image: mysql:9.0.1
container_name: db_mysql_container
environment:
MYSQL_DATABASE: backend
MYSQL_USER: asdf
MYSQL_PASSWORD: asdf
MYSQL_ROOT_PASSWORD: asdf
MYSQL_TCP_PORT: 3307
ports:
- '3307:3307'
api:
build: .
container_name: django_container
command: bash -c "pip install -q -r requirements.txt &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/app
ports:
- '8000:8000'
depends_on:
- db
это работает. Кажется, что я должен иметь возможность запускать mysql в контейнере на порту 3306, а затем docker должен отправлять трафик, отправленный на порт 3307 моего хоста, на порт 3306 контейнера.