Хост службы Docker недоступен внутри контейнера - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь создать кластер mongodb на основе этого ресурса .Имя хоста службы недоступно внутри контейнера.Я выполнил следующие шаги:

Создание виртуальных машин:

docker-machine create -d virtualbox node1
docker-machine create -d virtualbox node2
docker-machine create -d virtualbox node3

Открытие портов 2376, 7946, 4789 во всех узлах и перезапущенный докер, используяследующие команды.

sudo su
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p udp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

iptables-save > /etc/iptables.conf
/etc/init.d/docker restart

Инициализация роя и добавление к нему узлов

Node 1:
docker swarm init --listen-addr 192.168.99.100 --advertise-addr 192.168.99.100
Node 2: 
docker swarm join --token <TOKEN> --listen-addr 192.168.99.101 --advertise-addr 192.168.99.101 192.168.99.100:2377
Node 3: 
docker swarm join --token <TOKEN> --listen-addr 192.168.99.102 --advertise-addr 192.168.99.102 192.168.99.100:2377

На узле диспетчера для маркировки каждого узла:

docker node update --label-add mongo.replica=1 $(docker node ls -q -f name=node1)
docker node update --label-add mongo.replica=2 $(docker node ls -q -f name=node2)
docker node update --label-add mongo.replica=3 $(docker node ls -q -f name=node3)

Создание сети для Mongo Service Cluster:

docker network create --driver overlay --internal mongo

Создание Mongo Service:

docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata1,target=/data/db --mount type=volume,source=mongoconfig1,target=/data/configdb --constraint 'node.labels.mongo.replica == 1' --name mongo1 mongo:3.2 mongod --replSet example
docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata2,target=/data/db --mount type=volume,source=mongoconfig2,target=/data/configdb --constraint 'node.labels.mongo.replica == 2' --name mongo2 mongo:3.2 mongod --replSet example
docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata3,target=/data/db --mount type=volume,source=mongoconfig3,target=/data/configdb --constraint 'node.labels.mongo.replica == 3' --name mongo3 mongo:3.2 mongod --replSet example

Инициализация набора реплик:

docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) 
\ mongo --eval 'rs.initiate({ _id: "example", 
\ members: [{ _id: 1, host: "mongo1:27017" }, 
\ { _id: 2, host: "mongo2:27017" }, 
\ { _id: 3, host: "mongo3:27017" }], 
\ settings: { getLastErrorDefaults: { w: "majority", wtimeout: 30000 }}})'

Я получаю следующую ошибку для последней команды:

MongoDB shell version: 3.2.21
connecting to: test
{
    "ok" : 0,
    "errmsg" : "No host described in new configuration 1 for replica set example maps to this node",
    "code" : 93
}

После некоторых проверок я узнал, что имена хостовmongo1, mongo2, mongo3 не доступны в контейнере.

Я не уверен, где я делаю неправильно.Любая помощь будет полезна для решения этой проблемы.

...