Docker 运行 MongoDB 副本集..,它是如何工作的?
Posted
技术标签:
【中文标题】Docker 运行 MongoDB 副本集..,它是如何工作的?【英文标题】:Docker Run MongoDB replica set.., how is it working? 【发布时间】:2021-12-21 17:44:11 【问题描述】:所以我正在创建一些大量使用 mongo 事务的软件。
到目前为止,我只尝试过 testcontainers mongo 和纯单元测试。
现在我打算手动对其进行测试,但我收到一个类似以下内容的错误:Transaction numbers are only allowed on a replica set ...
,但在单元测试期间不会发生该错误。
我读到这个错误的发生是因为事务只能在副本集上进行,但是,测试容器是如何工作的?我在运行测试期间检查了docker ps
,只有一个 mongo docker 容器启动。
我检查了testcontainers
传递的参数,结果它们通过了--replSet docker-rs
。所以我做了,但后来我收到了这个错误:NotYetInitialized: Cannot use non-local read concern until replica set is finished initializing.
我很头疼,想知道 testcontainers 如何运行一个行为类似于副本集的 ONE mongo docker 容器。
【问题讨论】:
您使用的是GenericContainer
、Testcontainers MongoDB module 还是mongodb-replica-set?您能否添加启动 MongoDB 实例的测试的相关部分?
测试容器模块
【参考方案1】:
假设您使用的是Tescontainers MongoDB module,那么您手动设置中缺少的部分很可能是mongo replica set initiation。
这在 testcontainers 模块文档中提到:
通过执行正确的命令初始化单个副本集
还可以随意查看模块源代码本身以深入了解实现细节。例如,initReplicaSet() part。
【讨论】:
testcontainers 部分没有任何遗漏。它完美地工作。我无法工作的是用于事务的 docker 容器(没有测试容器)。测试容器是如何做到的?没关系,你完全正确! 我深入研究了实现,但没有找到那部分。我什至开始检查 ryuk 的源代码。猜猜它只是滑过我的眼睛以上是关于Docker 运行 MongoDB 副本集..,它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
在 docker swarm 中启动 MongoDB 副本集