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 контейнера.

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