如何使用 Docker compose 制作 MongoDB 6 单节点复制集?

Fra*_*nso 2 mongodb docker docker-compose

在我的本地 Mac M1 PRO 上,我使用 Docker compose 来挂载基于 MongoDB 5 的单节点复制集已有几个月了。

version: "3.9"
services:
  mongodb:
    image: mongo:5
    command: --replSet rs0
    ports:
      - '28017:27017'
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongo localhost:27017/admin --quiet
      interval: 2s
      timeout: 3s
      retries: 5

  mongo-init:
    image: mongo:5
    restart: "no"
    depends_on:
      mongodb:
        condition: service_healthy
    command: >
      mongo --host mongodb:27017 --eval
      '
      rs.initiate( {
        _id : "rs0",
        members: [
          { _id: 0, host: "localhost:27017" }
        ]
      })
      '
Run Code Online (Sandbox Code Playgroud)

它运行良好,我有一个简单的 MongoDB 5 复制集。现在,我希望 MongoDB 6 也能实现同样的效果。因此,我将映像从 mongodb:5 修改为 mongodb:6,但副本集未挂载。

我有这个错误:

{"t":{"$date":"2023-04-14T08:52:52.326+00:00"},"s":"I",  "c":"-", "id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"Failed to refresh key cache","attr":{"error":"NotYetInitialized: Cannot use non-local read concern until replica set is finished initializing.","nextWakeupMillis":24600}}
Run Code Online (Sandbox Code Playgroud)

我不需要 TLS 或加密功能。

我的配置有什么问题吗?

小智 9

mongo6 docker 容器已经更改了一些内部结构,这是我的工作版本除了在命令/运行状况检查中设置正确的端口差异之外,端口差异不相关。

  mongo:
    image: mongo:6
    command: [--replSet, my-replica-set, --bind_ip_all, --port, "30001"]
    ports:
      - 30001:30001
    healthcheck:
      test: test $$(mongosh --port 30001 --quiet --eval "try {rs.initiate({_id:'my-replica-set',members:[{_id:0,host:\"mongo:30001\"}]})} catch(e) {rs.status().ok}") -eq 1
      interval: 10s
      start_period: 30s
Run Code Online (Sandbox Code Playgroud)