第一次使用MongoDB+Docker-从dockercompose设置

我想尝试一个我在 GitHub 上找到的项目,所以我在 MacOS 上安装了 MongoDB,现在我试图了解如何通过目录中的 docker compose 文件正确设置它。这是泊坞窗文件:

version: '3'
services:
# replica set 1
  mongors1n1:
    container_name: mongors1n1
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27017:27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/data1:/data/db

  mongors1n2:
    container_name: mongors1n2
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27027:27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/data2:/data/db

  mongors1n3:
    container_name: mongors1n3
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27037:27017
    expose:
      - "27017"

    volumes:
      - ~/mongo_cluster/data3:/data/db

# replica set 2
  mongors2n1:
    container_name: mongors2n1
    image: mongo
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27047:27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/data4:/data/db

  mongors2n2:
    container_name: mongors2n2
    image: mongo
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27057:27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/data5:/data/db

  mongors2n3:
    container_name: mongors2n3
    image: mongo
    command: mongod --shardsvr --replSet mongors2 --dbpath /data/db --port 27017
    ports:
      - 27067:27017
    expose:
      - "27017"

    volumes:
      - ~/mongo_cluster/data6:/data/db

  # mongo config server
  mongocfg1:
    container_name: mongocfg1
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/config1:/data/db

  mongocfg2:
    container_name: mongocfg2
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/config2:/data/db

  mongocfg3:
    container_name: mongocfg3
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017

    expose:
      - "27017"
    volumes:
      - ~/mongo_cluster/config3:/data/db

# mongos router
  mongos1:
    container_name: mongos1
    image: mongo
    depends_on:
      - mongocfg1
      - mongocfg2
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
    ports:
      - 27019:27017
    expose:
      - "27017"

  mongos2:
    container_name: mongos2
    image: mongo
    depends_on:
      - mongocfg1
      - mongocfg2
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
    ports:
      - 27020:27017
    expose:
      - "27017"


# TODO after running docker-compose
# conf = rs.config();
# conf.members[0].priority = 2;
# rs.reconfig(conf);

这是运行和创建分片等的脚本:

#!/bin/sh
docker-compose up
# configure our config servers replica set
docker exec -it mongocfg1 bash -c "echo 'rs.initiate({_id: "mongors1conf",configsvr: true, members: [{ _id : 0, host : "mongocfg1" },{ _id : 1, host : "mongocfg2" }, { _id : 2, host : "mongocfg3" }]})' | mongo"

# building replica shard
docker exec -it mongors1n1 bash -c "echo 'rs.initiate({_id : "mongors1", members: [{ _id : 0, host : "mongors1n1" },{ _id : 1, host : "mongors1n2" },{ _id : 2, host : "mongors1n3" }]})' | mongo"
docker exec -it mongors2n1 bash -c "echo 'rs.initiate({_id : "mongors2", members: [{ _id : 0, host : "mongors2n1" },{ _id : 1, host : "mongors2n2" },{ _id : 2, host : "mongors2n3" }]})' | mongo"


# we add shard to the routers
docker exec -it mongos1 bash -c "echo 'sh.addShard("mongors1/mongors1n1")' | mongo "
docker exec -it mongos1 bash -c "echo 'sh.addShard("mongors2/mongors2n1")' | mongo "

如果我尝试直接运行脚本,则会收到错误消息:

mongos1 | {"t":{"$date":"2021-07-25T09:03:56.101+00:00"},"s":"I", "c":"-", "id":4333222, "ctx":"ReplicaSetMonitor-TaskExecutor","msg":"RSM 收到错误响应","attr":{"host":"mongocfg3:27017","error":"HostUnreachable: 连接到 mongocfg3:27017 时出错( 172.18.0.2:27017) :: 由 :: Connection denied","re​​plicaSet":"mongors1conf","re​​sponse":"{}"}} 引起

mongos1 | {"t":{"$date":"2021-07-25T09:03:56.101+00:00"},"s":"I", "c":"NETWORK", "id":4712102, "ctx":"ReplicaSetMonitor-TaskExecutor","msg":"主机在副本集中失败","attr":{"replicaSet":"mongors1conf","host":"mongocfg3:27017","error":{ "code":6,"codeName":"HostUnreachable","errmsg":"错误连接到 mongocfg3:27017 (172.18.0.2:27017) :: 由 :: 连接被拒绝"},"action":{"dropConnections ":true,"requestImmediateCheck":false,"outcome":{"host":"mongocfg3:27017","success":false,"errorMessage":"HostUnreachable:

以及其他错误,例如:

mongos1 | {"t":{"$date":"2021-07-25T09:05:39.743+00:00"},"s":"I", "c":"-", "id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"刷新密钥缓存失败","attr":{"error":"FailedToSatisfyReadPreference: 找不到与读取首选项匹配的主机 { mode:"nearest " } 为 set mongors1conf","nextWakeupMillis":1800}}

docker 不应该在没有用户的情况下配置所有文件吗?还是我需要像数据库等一样手动创建一些东西?

编辑:这是我运行脚本时出现的第一个错误:日志

以上是第一次使用MongoDB+Docker-从dockercompose设置的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>