Оба ответа дают интересную информацию, но в них отсутствует главное.
В 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
.