Невозможно подключиться к redis в docker и django

Я запустил контейнер redis с помощью этой команды: docker run -d --name redis -p 6379:6379 redis.

и я запустил свое приложение Django с помощью этой команды: docker run -it -p 8000:8000 voucher.

и мое подключение redis url - redis://redis:6379/1.

Но я не могу подключиться к redis, вот моя ошибка: redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known.

PS: Я не использую docker-compose

Определили ли вы информацию о redis в файле .env? Это тоже может привести к ошибке подключения.

/.env

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=yourpassword/blank
REDIS_PORT=6379

Я исправил это, изменив url подключения к redis на redis://172.17.0.2:6379/1.
. Но почему так? Как я могу использовать имена контейнеров вместо IP?

Я исправил это, изменив url подключения к redis на redis://172.17.0.2:6379/1. Но почему так происходит? Как я могу использовать имена контейнеров имена контейнеров вместо IP-адресов?

Это IP-адрес вашего хоста. У вас есть несколько способов решения проблемы.

1 - Используйте жестко закодированный IP, как вы это сделали.

2 - Используйте docker link для подключения приложений, например:

docker run --name my-redis-application --link my-redis-container:redis -d centos

3 - Вы можете создать redis.conf со следующим содержанием:

bind 0.0.0.0

и использовать его при запуске, например:

docker run -v $(pwd):/usr/local/etc/redis/ --name redis -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf

4 - Вы можете использовать docker-compose для лучшего соединения, как в #2.

Оба контейнера должны находиться в одном и том же Docker network, чтобы иметь возможность общаться через имена контейнеров.

docker run -d --name redis --network your-network -p 6379:6379 redis

docker run -it --network your-network -p 8000:8000 voucher

Я думаю, что лучший вариант - это docker-compose. если вы хотите использовать docker-compose, вот ответ.

docker-compose.yml

version: "3.8"
services :
  redis:
    image : redis
    container_name : redis
    restart : unless-stopped
    ports: 
      - 6379:6379 
  voucher:
    image : voucher
    ports:
      - 8000:8000
    depends_on:
      - redis

теперь вы можете подключиться к Redis, используя имя сервиса "redis".

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