【问题标题】:Sessions collection is not set up; waiting until next sessions refresh interval: Replication has not yet been configuredSessions 集合未设置;等到下一个会话刷新间隔:尚未配置复制
【发布时间】:2020-04-25 00:50:06
【问题描述】:

我有一个 docker-compose.yml 文件,它制作了三个 mongo 容器,其中包括三个副本集,我的容器构建没有任何问题,但是当我的服务正常运行时 setupmongo.sh 不起作用。我的意思是 rs.initiate() 函数不适用于 bash 文件,但是当我尝试手动运行带有其参数的 rs.initiate() 函数时(在 docker 交互式终端中)它工作正常,我的副本的行为应如此。结果我需要在 bash 文件上运行 rs.initiate() 函数

这是我的 docker-compose.yml 文件

version: "3.3"
services:
  mongo1:
    hostname: mongo1
    container_name: mongo1
    image: mongo:4.0.4
    command: mongod --replSet devrs
    volumes:
      - ./mongodb/data1/db:/data/db
      - ./mongodb/data1/configdb:/data/configdb
    networks:
      - mongo-dev-net
    expose:
      - 27017
    ports:
      - 30001:27017
    restart: always

  mongo2:
    hostname: mongo2
    container_name: mongo2
    image: mongo:4.0.4
    command: mongod --replSet devrs
    volumes:
      - ./mongodb/data2/db:/data/db
      - ./mongodb/data2/configdb:/data/configdb
    networks:
      - mongo-dev-net
    expose:
      - 27017
    ports:
      - 30002:27017
    restart: always

  mongo3:
    hostname: mongo3
    container_name: mongo3
    image: mongo:4.0.4
    command: mongod --replSet devrs
    volumes:
      - ./mongodb/data3/db:/data/db
      - ./mongodb/data3/configdb:/data/configdb

    networks:
      - mongo-dev-net
    expose:
      - 27017
    ports:
      - 30003:27017
    restart: always

  mongo-config:
    container_name: mongo-config
    image: alpine
    networks:
      - mongo-dev-net
    depends_on:
      - mongo1
      - mongo2
      - mongo3
    volumes:
      - ./setupmongo.sh:/setupmongo.sh
    entrypoint: ["/setupmongo.sh"]

networks:
  mongo-dev-net:

还有 setupmongo.sh 文件

#!/bin/bash

echo "Start"

mongo  <<EOF
rs.config()

rs.initiate(
{
    "_id" : "devrs",
    "members" : [
        {
            "_id" : 0,
            "host" : "mongo1:27017",
            "priority": 2
        },
        {
            "_id" : 1,
            "host" : "mongo2:27017",
            "priority": 0
        },
        {
            "_id" : 2,
            "host" : "mongo3:27017",
            "priority": 0
        }
    ]
}
)
EOF

最后没有初始化副本集

【问题讨论】:

  • 他正在尝试连接到它自己的27017 端口,而你没有运行任何东西。 mongo-config:27017 中不应该有数据库吗?
  • 当你的脚本运行mongo时,它怎么知道连接到哪里?
  • @samthegolden 你的意思是我应该删除 mongo-config 服务并相应地添加“入口点:[”/setupmongo.sh”]“mongo 服务 mongo1, mongo2, mongo3
  • 我不知道mongo。但可能是的。
  • @DavidMaze 更新了 docker-compose.yml 文件,不幸的是仍然无法正常工作

标签: mongodb bash docker docker-compose replication


【解决方案1】:

按照您配置的方式,端口 30001、30002 和 30003 是 HOST 端口,而不是 CONTAINER 端口。格式为HOST:CONTAINER。请参阅documentation

因此,您必须连接到每个容器的 27017 并相应地更改入口点:mongo1:27010mongo2:27010mongo3:27010

这将起作用,因为您已经在每个容器中公开了该端口。

【讨论】:

  • 我试过这样 rs.initiate({_id:"devrs",members:[{_id:0,host:"mongo1:27017",priority:2},{_id:1,主机:“mongo2:27017”,优先级:0},{_id:2,主机:“mongo3:27017”,优先级:0}]});但我没有工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 2012-02-28
  • 2013-05-13
相关资源
最近更新 更多