Redis в Docker: ошибка 111 при подключении к 0.0.0.0: 6379. Отказано в подключении

#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. и защищенного режима нет.