下面是带有MongoDB副本集的docker-compose文件,我正在使用健康检查来初始化该副本集。它通常会完成任务,但一段时间后会在容器上生成警告。有人能解释一下为什么支票没有通过吗?我添加了一个OR语句(“rs.status().ok”),它应该在初始化后工作。(我知道healthckeck不应该用于此,它用于一个项目)
healthcheck:
test: test $$(echo "rs.initiate({_id:'rs0',members:[{_id:0,host:\"mongodb1:27017\"},{_id:1,host:\"mongodb2:27018\"},{_id:2,host:\"mongodb3:27019\"}]}).ok || rs.status().ok" | mongosh --port 27017 --quiet) -eq 1
interval: 10s
start_period: 30s
timeout: 60s
这里只有一个helthckeck。
version: "3"
services:
mongodb1:
container_name: mongodb1
image: mongo
restart: always
ports:
- "27017:27017"
command: mongod --replSet rs0 --port 27017 --bind_ip_all
healthcheck:
test: test $$(echo "rs.initiate({_id:'rs0',members:[{_id:0,host:\"mongodb1:27017\"},{_id:1,host:\"mongodb2:27018\"},{_id:2,host:\"mongodb3:27019\"}]}).ok || rs.status().ok" | mongosh --port 27017 --quiet) -eq 1
interval: 10s
start_period: 30s
timeout: 60s
volumes:
- ./mongodb/db1:/data/db
networks:
- Internal
mongodb2:
container_name: mongodb2
image: mongo
restart: always
ports:
- "27018:27018"
command: mongod --replSet rs0 --port 27018 --bind_ip_all
networks:
- Internal
volumes:
- ./mongodb/db2:/data/db
depends_on:
- mongodb1
mongodb3:
container_name: mongodb3
image: mongo
restart: always
ports:
- "27019:27019"
command: mongod --replSet rs0 --port 27019 --bind_ip_all
networks:
- Internal
volumes:
- ./mongodb/db3:/data/db
depends_on:
- mongodb1
networks:
Internal:
internal: true
External:
这是完整的docker compose文件。
1条答案
按热度按时间wmtdaxz31#
运行
rs.initiate()
后,您必须等待一段时间,直到副本集启动。对于初始化和健康检查,我建议使用如下脚本:
在
mongosh
中运行此脚本并检查返回值$?