Подключение нескольких контейнеров по сети на разных серверах является идеальным вариантом использования для docker swarm. Вы должны попытаться создать оверлейную сеть и подключить запущенные контейнеры к рою и этой сети, как описано here. В зависимости от ваших знаний о экосистеме рой вы можете попробовать различные решения.
Начиная с грузчиком 1.12, и если вы хотите вручную управлять контейнерами можно запустить
# retrieve the last swarm version
$ docker pull swarm
# running your swarm manager on your server
$ docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')
# creating a cross server container network
$ docker network create --driver overlay redisnet
Эта команда будет выводить команду рабыня, чтобы использовать на вашем узле. Эта команда позволит вам присоединиться к рою в качестве «подчиненного» сервера. Если вы хотите запустить службы с этого сервера, вы должны вывести следующую команду, которая даст вам токен менеджера.
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1ewyz5urm5ofu78vddmrixfaye5mx0cnuj0hwxdt7baywmppav-0p5n6b7hz170gb79uuvd2ipoy \
<IP_ADDRESS>:2377
Когда ваши узлы на роя можно запускать REDIS услуги с репликами
$ docker service create --network redisnet \
--name redis --replicas 1 redis:3.0.1
$ docker service create --network redisnet \
--name old_redis --replicas 1 redis:2.8.20
$ docker service create --network redisnet --name app <APP_IMAGE>
Теперь все ваши контейнеры могут сделать HTTP вызовы, используя имя службы, как имя хоста для конкретной службы. В принципе, если вам нужно только получить доступ к вашим услугам redis из вашего приложения, это должно сделать это.
Вы также можете открыть порты, используя ту же опцию докера, с помощью -p
, но вам нужно выяснить, какой сервер выполняет вашу службу. Тем не менее, это требует, чтобы вы следовали другим ответам, чтобы проверить, нет ли каких-либо блокировок портов на вашей виртуальной машине.
Кроме того, существуют другие решения, такие как Kubernetes или Mesos, но рой похож на официальный путь.
Докер должен открыть порты, как ожидалось, что произойдет, если вы попытаетесь подключиться через redis-cli с другой машины? –
В дополнение к тестированию соединения с кли на локальном компьютере, существуют ли какие-либо межсетевые экраны или другие ограничения соединения между двумя узлами? – BMitch
Я проверяю аппаратный ip, где установлен Docker, он работает, если я даю 127.0.0.1, но не с адресом Ip – Prithvi