#python #django #docker #redis
#python #django #docker #redis
Вопрос:
Python и Redis отлично работают вместе в моем локальном. Я пытаюсь настроить проект.
Когда я создаю docker-compose, контейнер redis работает нормально.
> Server initialized
> Ready to accept connections
Но когда я вызываю запрос в POSTMAN, я получаю следующую ошибку:
Error 111 connecting to 0.0.0.0:6379. Connection refused.
Мои настройки:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://0.0.0.0:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
Мой docker-compose.yml:
redis:
image: bitnami/redis:latest
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
environment:
- ALLOW_EMPTY_PASSWORD=yes
ports:
- "6379:6379"
…и в Dockerfile:
ENV REDIS_URL=redis://0.0.0.0:6379/1
Чего мне не хватает?
Ответ №1:
Вы используете bitnami/redis:latest
для настройки redis, поэтому у вас наверняка есть другая служба docker-compose.yaml
для определения вашего приложения django, а затем ссылки на этот redis
контейнер.
Проблема здесь, вы используете redis://0.0.0.0:6379/1
для подключения к redis
контейнеру из своего django
контейнера, это неверно.
Фактически, если вы не определяете какую-либо настраиваемую сеть в своем файле компоновки, все контейнеры будут находиться в сети по умолчанию, что означает, что ваш django
контейнер может напрямую посещать ваш redis
контейнер с именем службы.
Одним словом, вы должны изменить
redis://0.0.0.0:6379/1
Для
redis://redis:6379/1
Возможно, вы захотите посмотреть сетевое соединение в Compose
Дополнительно, по мере раскрытия 6379
, поэтому изменение 0.0.0.0
IP-адреса вашего хоста docker может быть другим вариантом.
Комментарии:
1. Спасибо, так вы говорите, удалите ENV из Dockerfile и измените переменную CACHES в моих настройках?
2. Используйте
ENV
илиvariable in CACHES
зависит от вашей собственной логики, ключевой элемент0.0.0.0
неверен, вы можете попробовать изменить обаredis
, чтобы посмотреть. После того, как он заработает, вы можете найти, что лучше для вас,ENV
илиVariable in CACHES
.3. Спасибо, это сработало. Я также хочу добавить еще одну вещь: в моем redis.conf я закомментировал # bind 127.0.0.1 -::1. и защищенного режима нет.