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

4si2a6ki  于 2023-05-06  发布在  Docker
关注(0)|答案(1)|浏览(278)

在我的本地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" }
        ]
      })
      '

它运行良好,我有一个简单的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}}

我不需要TLS或加密花哨的功能。
我的配置有什么问题?

6uxekuva

6uxekuva1#

mongo 6 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

相关问题