Соединение Redis отклонено между Vagrant и Docker - PullRequest
1 голос
/ 09 мая 2019

У меня есть такой докер:

version: '3.5'

services:

  RedisServerA:
    container_name: RedisServerA
    image: redis:3.2.11
    command: "redis-server --port 26379"
    volumes:
      - ../docker/redis/RedisServerA:/data
    ports:
      - 26379:26379
    expose:
      - 26379

  RedisServerB:
    container_name: RedisServerB
    image: redis:3.2.11
    command: "redis-server --port 6379"
    volumes:
      - ../docker/redis/RedisServerB:/data
    ports:
      - 6379:6379
    expose:
      - 6379

Теперь я делаю vagrant ssh и делаю

ping RedisServerA
ping RedisServerB

Они оба работают.

Теперь я пытаюсь подключиться к серверу redis:

redis-cli -h RedisServerB

Работает нормально

Затем я пытаюсь подключиться к другому

redis-cli -h RedisServerA -p 26739

Там написано:

Could not connect to Redis at RedisServerA:26739: Connection refused
Could not connect to Redis at RedisServerA:26739: Connection refused

Дважды.

Что мне здесь не хватает?

1 Ответ

4 голосов
/ 09 мая 2019

Как правило, в этой настройке вы позволяете каждому контейнеру работать на своем «естественном» порту. Для подключений извне Docker вам необходимо сопоставление ports:, и вы будете получать доступ к контейнеру через его опубликованный порт на IP-адресе хоста. Для соединений между контейнерами Docker (при условии, что они находятся в одной сети, и если вы использовали голый docker run, вы создали эту сеть вручную), вы используете имя контейнера и номер внутреннего порта контейнера.

Мы можем очистить файл docker-compose.yml, удалив некоторые ненужные строки (container_name: и expose: на самом деле не имеют практического эффекта) и позволив образу запустить его по умолчанию command: на порту по умолчанию, и только переназначение с ports:. Мы получили бы:

version: '3.5'
services:
  RedisServerA:
    image: redis:3.2.11
    volumes:
      - ../docker/redis/RedisServerA:/data
    ports:
      - 26379:6379
  RedisServerB:
    image: redis:3.2.11
    volumes:
      - ../docker/redis/RedisServerB:/data
    ports:
      - 6379:6379

Между контейнерами вы будете использовать порт по умолчанию

redis-cli -h RedisServerA
redis-cli -h RedisServerB

Из-за пределов Docker вы можете использовать имя хоста сервера и опубликованные порты

redis-cli -h server.example.com -p 23679
redis-cli -h server.example.com
...