我只想为本地开发环境配置 MongoDB 副本集,并且我有以下 docker-compose 文件。一切似乎都初始化良好,但容器 mongo-init-replica 似乎无法与提供的连接字符串连接。据我所知,Docker Compose 在同一网络中创建所有容器,因此它们应该能够互相看到。
这是 docker-compose.yml 文件:
version: '3'
services:
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
mongodb1:
image: mongo:latest
container_name: mongodb1
ports:
- "27017:27017"
volumes:
- ./data/db1:/data/db
environment:
- MONGO_INITDB_DATABASE=tennis
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_PRIORITY=1
command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
mongodb2:
image: mongo:latest
container_name: mongodb2
ports:
- "27018:27017"
volumes:
- ./data/db2:/data/db
environment:
- MONGO_INITDB_DATABASE=tennis
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_PRIORITY=0
command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
mongodb3:
image: mongo:latest
container_name: mongodb3
ports:
- "27019:27017"
volumes:
- ./data/db3:/data/db
environment:
- MONGO_INITDB_DATABASE=tennis
- MONGO_REPLICA_SET_NAME=rs0
- MONGO_PORT=27017
- MONGO_PRIORITY=0
command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
mongo-init-replica:
image: mongo:latest
depends_on:
- mongodb1
- mongodb2
- mongodb3
volumes:
- ./scripts:/scripts
command: ["mongosh", "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/admin", "/scripts/init-replica.js"]
这是容器mongo-init-replica启动时的日志:
Current Mongosh Log ID: 65c6bbfee1b8e4ee1e55263f
Connecting to: mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/admin?appName=mongosh+1.6.0
MongoServerSelectionError: Server selection timed out after 30000 ms
如果我停止任何 mongodb1、mongodb2 或 mongodb3 容器,我会得到类似的信息
MongoServerSelectionError: getaddrinfo ENOTFOUND mongodb3
所以看起来它解析了容器地址,但无法建立连接。
请问有什么提示吗?
提前致谢:)
我的 /etc/hosts 文件中似乎缺少以下条目:
127.0.0.1 mongodb1 mongodb2 mongodb3
这解决了问题,我能够配置副本集:)