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',
}
}