我在本地计算机上的docker中创建了mongodb副本。配置完成后,如果我在容器内部进行连接,副本就可以正常工作。然后,当我从计算机但在容器外部连接localhost:30001、30002、30003时,它说连接失败,并提示以下错误消息。
SERVER [node1:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node3
SERVER [node2:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node2
SERVER [node1:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node1
这是我的docker-comopse文件
version: '3'
services:
node1:
image: mongo
container_name: "node1"
networks:
- mongocluster
ports:
- 30001:27017
command: mongod --dbpath /data/db --replSet repset
node2:
image: mongo
container_name: "node2"
networks:
- mongocluster
ports:
- 30002:27017
command: mongod --dbpath /data/db --replSet repset
depends_on:
- node1
node3:
image: mongo
container_name: "node3"
networks:
- mongocluster
ports:
- 30003:27017
command: mongod --dbpath /data/db --replSet repset
depends_on:
- node2
networks:
mongocluster:
driver: bridge
这就是我在mongodb中配置集群的方式
config = {
"_id": "repset",
"members": [
{
"_id": 0,
"host": "node1:27017"
},
{
"_id": 1,
"host": "node2:27017"
},
{
"_id": 2,
"host": "node3:27017"
}
]
}
我了解我的本地计算机无法解释node1,node2和node3的IP。我只是将其用于开发目的,那么修复它的最快方法(也许是肮脏的)是什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
您的猜测是正确的。 Mongo的副本将自我报告的节点1、2、3设置为IP地址,而您的客户端来自容器网络外部,则尝试[未成功]到达这些地址。
一种简单的解决方法是将客户端放在同一个docker网络中的容器内。
另一个[dirty]选项-调整本地计算机上的hosts文件,以将nodeX解释为本地主机。您需要调整端口号,以便主机和容器的端口号相同(在容器中的30001,2,3上启动mongo)
也许是最简单的一种-不用担心副本集,而只需运行独立的mongo容器即可。