Redis docker, не удается подключиться к redis-cli - PullRequest
2 голосов
/ 24 февраля 2020

Я пытаюсь запустить Redis с постоянным хранилищем. Я следовал за официальной docker страницей Redis для установки.

Я вытащил изображение с помощью -

docker pull redis

Я запустил Redis с постоянным хранилищем с помощью -

docker run --name some-redis -d redis redis-server --appendonly yes

И я пытаюсь подключиться к экземпляру Redis с Redis Cli с -

docker run -it --network some-network --rm redis redis-cli -h some-redis

Это дает мне следующую ошибку -

docker: ответ об ошибке от демона: сеть не найдена.

Я внимательно изучаю документацию, почему это не работает?

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Во-первых, вы запускаете эту команду как redis-server

docker run --name some-redis -d redis redis-server --appendonly yes

Далее вы хотите запустить redis-cli, чтобы подключиться к redis-server, подключить контейнер redis-server и запустить redis-cli

docker exec -it some-redis redis-cli -h

Конечно, если вы хотите получить доступ через сеть, например, к странице redis, вам необходимо подключить сеть контейнера cli к контейнеру redis-server, чтобы разделить сеть

docker run --rm -it --net=container:some-redis  redis redis-cli -h
1 голос
/ 24 февраля 2020

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

1) С мостовой сетью по умолчанию

Вы не можете связываться между контейнерами этой сети через имя контейнера.
Так что здесь docker run -it --network some-network --rm redis redis-cli -h some-redis, часть some-redis не является разрешаемым именем хоста ,

Чтобы преодолеть это, вы должны обратиться к контейнеру по его IP-адресу.
Проверьте контейнер, чтобы узнать, что:

docker container inspect some-redis | grep -i ipaddress

Вы должны получить что-то вроде: "IPAddress": "172.17...."

Теперь укажите IP-адрес в качестве параметра -h, и все должно быть в порядке:

docker run -it --network some-network --rm redis redis-cli -h 172.17...

Это действительно не сетевой / многоразовый / переносимый способ создания двух контейнеров для связи друг с другом. Это больше подходит для экспериментов.

2) С пользовательской мостовой сетью

Вы можете связываться между контейнерами этой сети через имя контейнера.

Создайте свою сеть:

docker network create redis-network

Запустите сервер Redis и подключите его к этой сети:

docker run --name some-redis -d --network redis-server redis redis-server --appendonly yes

Запустите клиент Redis и подключите его к этой сети:

docker run -it --rm --network redis-network redis redis-cli -h some-redis

Теперь клиент может подключиться к экземпляру сервера через -h some-redis.

1 голос
/ 24 февраля 2020

Сначала создайте сеть

docker network create some-network

, затем используйте ее во всех ваших контейнерах, которые должны использовать сеть.

docker run --network some-network

Когда вы закончите, удалите сеть.

docker network rm some-network
...