Docker服务主机在容器内不可用

时间:2018-12-19 07:53:00

标签: docker docker-swarm

我正在尝试基于this resource创建一个mongodb集群。 服务主机名在容器内不可用。 我按照以下步骤操作:

创建虚拟机:

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

使用以下命令在所有节点中打开端口2376、7946、4789并重新启动docker。

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

在Manager节点上,标记每个节点:

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服务集群创建网络:

docker network create --driver overlay --internal mongo

创建Mongo服务:

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在容器中不可用。

我不确定我在哪里做错了。任何帮助将有助于解决此问题。

0 个答案:

没有答案