Невозможно подключиться к 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".