javascript - 如何创建一个节点的 MongoDB 副本集并使用 docker_compose.yml 对其进行初始化
问题描述
我正在尝试使用 docker compose 创建一个带有 MongoDB 和 mongo-express 的 MongoDB 集群。我可以很好地创建集群,但我需要一个单节点副本集才能为我的应用程序启用更改流。目标是让 docker compose 在运行集群后无需进入 mongo shell 即可自动创建副本集。
我一直在努力寻找一个可行的例子。我发现的最好的在这里,但它不适合我。mongo 容器无法启动。
这是我的 docker_compose.yml 文件:
version: "3"
services:
mongodb:
image: mongo
container_name: mongodb
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
volumes:
- ./.docker/mongodb/mongod.conf:/etc/mongod.conf
- ./.docker/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
- ./.docker/mongodb/data/db/:/data/db/
- ./.docker/mongodb/data/log/:/var/log/mongodb/
healthcheck:
test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet) -eq 1
interval: 10s
start_period: 30s
command: ["/usr/bin/mongod -f", "/etc/mongod.conf", "--replSet", "rs0", "--bind_ip_all"]
mongo-express:
image: mongo-express
container_name: mongo-express
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
- ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
- ME_CONFIG_MONGODB_SERVER=mongodb
networks:
default:
name: mongo-express-network
volumes:
mongodb-data:
driver: local
魔术应该在command
上面链接的帖子中,但我尝试过的任何方式都不起作用。如果我删除它,我会得到一个工作集群 mongo 和 mongo-express。但没有副本集。
顺便说一句,如果我进入 shell 并运行:
# mongod -f /etc/mongod.conf --replSet rs0 --bind_ip_all
Error opening config file: Is a directory
try 'mongod --help' for more information
#
mongod.conf
位于其他地方吗?
任何有关使这项工作的帮助将不胜感激!
解决方案
mkdir initdb.d
echo 'rs.initiate()' |tee initdb.d/rs.js
docker run -itv `pwd`/initdb.d:/docker-entrypoint-initdb.d/:ro -p 27017:27017 mongo --replSet myrs --bind_ip_all
mongod.conf 是否位于其他地方?
图像上没有一个,所以如果你创建了它,它就会在你放置的任何地方。
推荐阅读
- visual-studio-2017 - Carbon Black Bit9 阻止了 VS 2017 上的项目执行,但它正在同一台机器上运行 VS 2015
- ios - 如何让 UITextView 检测到点击表格单元格
- java - 如何在 Spring MVC 的 @RequestParam 中获取 LIST 输入?
- kubernetes - 如何使用 kubectl 在 Kubernetes 中列出应用的自定义资源定义
- swiftui - SwiftUI 如何像在 UIKit 中一样为 NavigationBar titleView 设置图像?
- c++ - 如何暂停我的进程中的所有线程(停止世界)
- android - 如何保持媒体播放器服务运行直到它被杀死?
- mysql - 具有多个左连接的mysql查询需要大量时间来获取数据
- android - 如何将工具栏与来自活动和片段的视图组合在一起?
- c# - 在旧代码中发送邮件时出现 SMTP 身份验证错误