Ошибка 99 при подключении к localhost: 6379.Невозможно назначить запрошенный адрес - PullRequest
0 голосов
/ 03 марта 2019

Установка: у меня есть виртуальная машина, и на виртуальной машине работают три контейнера (прокси-сервер nginx, очень минималистичное приложение для фляги и redis).Flask должен работать на порту 5000, а redis - на 6379.

Каждый из этих контейнеров работает и работает нормально, как отдельные службы, но также доступен через докер, составляющий как службу .

В приложении колба моя цель - подключиться к Redis и запросить некоторые ключи.

Контейнер nginx предоставляет порт 80, порт колбы 5000 и порт 6379 перенаправления.

В приложении колба у меня есть функция, которая пытается создать клиент Redis

db = redis.Redis(host='localhost', port=6379, decode_responses=True)

При запуске приложения колба я получаю сообщение об ошибке, что порт не может использоваться

redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.

Iя теряю ясность, что может быть причиной этой проблемы, и любые идеи будут оценены.

Ответы [ 2 ]

0 голосов
/ 27 августа 2019

У меня была такая же проблема, за исключением того, что служба, к которой я хотел, чтобы мой контейнер имел доступ, была удаленной и отображалась через туннель ssh на мой хост Docker.Другими словами, для моего кода не было службы docker-compose.Я решил проблему, явно указав redis искать мой локальный хост в виде строки:

pyredis.Redis(host='docker.for.mac.localhost', port=6379)
0 голосов
/ 03 марта 2019

В приложении фляги у меня есть функция, которая пытается создать клиента redis

db = redis.Redis(host='localhost', port=6379, decode_responses=True)

Когда ваш процесс фляги выполняется в контейнере, localhost относится к сетевому интерфейсусамого контейнера.Он не разрешает доступ к сетевому интерфейсу вашего узла докера.

Поэтому вам нужно заменить localhost на IP-адрес контейнера, на котором запущен redis.

В контексте файла docker-compose.yml это легко, так как docker-compose заставит имена служб преобразовываться в правильный IP-адрес контейнера:

version: "3"
services:
  my_flask_service:
    image: ...
  my_redis_service:
    image: ...

затем в вашей колбеприложение, использовать:

db = redis.Redis(host='my_redis_service', port=6379, decode_responses=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...