机器重启后使用 docker-compose rebuild 重启 Mongocontainer 后出现持久存储故障或授权失败

机器重启后使用 docker-compose rebuild 重启 Mongocontainer 后出现持久存储故障或授权失败

我已经设置了一个连接到 nodejs 应用程序的 mongo 容器。
首先,我执行 docker-compose up --build,在其中我将 mongo 作为服务启动,无需身份验证,即注释掉。
然后我使用 docker exec -it mongoContainerID /bin/bash 登录到 mongo 终端

之后我添加了两个用户:

db.createUser(  
  {  
    user: "abc",
    pwd: "abcpwd",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
  }  
)  

db.createUser(
  {
    user: "abc2",  
    pwd: "abc2pwd",  
    roles: [ { role: "readWrite", db: "test" } ]  
  }  
)  

然后重新启动:启用身份验证。因此,在机器重新启动之前,一切都运行正常。
每次机器重启后我都必须重复添加用户的过程, 否则我会收到身份验证失败错误:UserNotFound: Could not find user

用指南针检查数据库后,我发现没有以前的数据。
这意味着持久存储无法正常工作。

这是我的docker 撰写文件

version: "3"  
services:  
  app:  
    build: .  
    command: nodemon -L app.js  
    volumes:  
      - "./:/usr/src/app"  
      - "node_modules:/usr/src/app/node_modules"  
    ports:  
      - "9000:3000"  
    depends_on:  
      - "mongo"  

  mongo:  
    image: "mongo"
    ports:  
      - "27019:27017"  
    env_file: .env  
    environment:  
      - MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}  
      - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}  
      - MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}  
    volumes:  
      - /my/persistent/dir/mongo:/data/db  
    command: mongod --auth  

  # adminmongo:  
  #         image: "mrvautin/adminmongo"  
  #         ports:  
  #             - "1234:1234"  
volumes:  
  node_modules:  

我的评估:

mongodb 持久存储没有像预期的那样工作。

问题

我有两个问题我想我可能会遗漏:

  1. 我还没有创建文件夹 /my/persistent/dir/mongo 以供 mongo volume 命令使用。它不应该自动创建吗,还是我必须手动创建?如果是,那么路径应该是什么?(docker-compose 文件所在的目录)/my/persistent/dir/mongo ???
  2. 在 docker-compose 文件末尾的 Volume 标签下,我只写了 node_modules。我还应该提到 mongo 卷的路径吗?
    (如果我不写 node_module 卷,它会出错,但当我跳过 mongo 卷文件夹时不会出错。为什么?)

相关内容