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——mongodb副本集

Docker搭建MongoDB 4.0副本集

在 docker swarm 中启动 MongoDB 副本集

docker-compose 配置 mongodb 副本集/复制集

MongoDB副本集-Docker版

Docker部署MongoDB副本集