Django Q не может подключиться к mysql

Я развернул свои Django, Django-Q, mysql, metabase, redis на docker, но недавно я запустил сервисы и использовал simpleui для изменения страницы администратора, но он показывает ошибку следующего вида:

Очевидно, что это происходит из-за разрыва соединения с mysql, но я не знаю, почему мой сервис DRF работает, и мой клиент может получать данные из mysql через RESTful API, но мой сервис django-q показывает ошибку разрыва соединения.

"settings.py" выглядит следующим образом:

А мой docker-compose.yml выглядит следующим образом:

version: '3'
networks:
  nginx_network:
    driver: bridge
  db_network:
    driver: bridge
  redis_network:
    driver: bridge
  django_network:
    driver: bridge
  web_network:
    driver: bridge
services:
  redis:
    image: redis:alpine
    networks:
      - redis_network
    container_name: server-redis
    ports:
      - "6379:6379"
  mysql:
    image: mysql
    networks:
      - db_network
    container_name: mysql
    hostname: mysql
    restart: always
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    ports:
      - 3307:3306
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_PORT=3307
      - MYSQL_DATABASE=kds_db
      - MYSQL_USER=***
      - MYSQL_PASSWORD=***
      - MYSQL_ROOT_PASSWORD=***
  adminer:
    image: adminer
    restart: always
    environment:
      ADMINER_DEFAULT_SERVER: mysql
    ports:
      - 3300:8080
  metabase:
    image: metabase/metabase
    networks:
      - db_network
    ports:
      - 3000:3000
    volumes:
      - .:/app/metabase
    depends_on:
      - mysql
  django_q:
    build:
      context: .
      dockerfile: Dockerfile.prod
    command: python manage.py qcluster
    container_name: django_q
    volumes:
      - .:/app
    networks:
      - db_network
      - redis_network
      - django_network
    depends_on:
      - redis
      - mysql
  web:
    build:
      context: .
      dockerfile: Dockerfile.prod
    image: web
    ports:
      - 8000:8000
    container_name: web
    restart: always
    command: gunicorn server.wsgi:application --bind 0.0.0.0:8000 -w 8 -k gthread && python manage.py collectstatic --no-input
    volumes:
      - .:/app
    expose:
      - 8000
    networks:
      - db_network
      - redis_network
      - django_network
      - nginx_network
    depends_on:
      - mysql
      - django_q
  nginx:
    image: nginx:1.25
    container_name: nginx
    restart: always
    ports:
      - 80:80
    volumes:
      -  ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - nginx_network
      - web_network
    depends_on:
      - web

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

В файле Django settings.py порт базы данных указан как 3307. Потому что docker внутренне запускает сервер MySQL на 3306, который был указан в docker-compose 3307:3306. Для внешнего подключения необходимо использовать 3307.

Я проверил настройки CACHE, вы добавили строку запроса db как 1,

# Caches settings
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.redis.RedisCache',
    'LOCATION': 'redis://server-redis:6379/1',
   }
}

Но в настройках Q_CLUSTER вы указали redis db как 0.

Q_CLUSTER = {
  'redis': {
      'host': 'server-redis',
      'port': 6379,
      'db': 0,
    }
}

Измените местоположение кэша на 0, как показано ниже & попробуйте. Надеюсь, это поможет вам.

# Caches settings
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.redis.RedisCache',
    'LOCATION': 'redis://server-redis:6379/0',
   }
}
Вернуться на верх