MongoDB 设置 auth 之后,数据丢失

autumnwolf · 2019年04月08日 · 最后由 autumnwolf 回复于 2019年04月08日 · 6194 次阅读

之前 mongo 没有开启 auth,现在想打开。但是开启后数据都丢失了。

最开始的 docker-compose.yml

mongo:
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
    - "27017:27017"

加上了数据户的账户和密码

mongo:
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
    - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password

然后 docker-compose up, 发现并没用添加这个用户,因为我的数据库已经存在了,所以继续加上创建用户名和密码的部分

mongo:
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
    - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro 

添加一个新的文件 mongo-init.js

use admin
db.createUser(
  {
    user: "admin",
    pwd: "passw0rd",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

就这样 auth 打开了,但是之前的数据库没有了。

有一个警告

WARNING: Service "mongo" is using volume "/data/db" from the previous container. Host mapping "/home/xxx/deploy/data" has no Recreating deploy_mongo_1 ...

PS:

  1. 在我的 mongo-init.js,应该是一直写的 `pwd: "passwr0rd", docker-compose.yml 里面是“password". 但是现在数据库用 docker-compose 里面的密码可以连上。
  2. 我的数据应该是 mount 到了工程目录下的 data 目录,也就是- ./data:/data/db. 这个目录从来没有动过,是不是 docker-compose up 会覆盖这个目录导致我数据丢失。还是其他的原因。

不知道是否能找回我的数据,望高人指点,谢谢了!

这单词很亮眼啊 INIT

已经重新初始化了吧。。。

@pynix 那个感觉应该不会 就是新建一个 admin 的用户 或许也有可能

docker-compose up 应该不会让 docker volume 消失,可以用这个查看 volume

docker volume ls
docker inspect { volume_name }

这个也许有帮助

https://stackoverflow.com/questions/45636883/docker-compose-using-volume-from-exisiting-container

@heroyct 谢谢!我清空了 container 然后重新 build 找回了数据

需要 登录 后方可回复, 如果你还没有账号请 注册新账号