我已经设置了一个连接到 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 持久存储没有像预期的那样工作。
问题
我有两个问题我想我可能会遗漏:
- 我还没有创建文件夹 /my/persistent/dir/mongo 以供 mongo volume 命令使用。它不应该自动创建吗,还是我必须手动创建?如果是,那么路径应该是什么?(docker-compose 文件所在的目录)/my/persistent/dir/mongo ???
- 在 docker-compose 文件末尾的 Volume 标签下,我只写了 node_modules。我还应该提到 mongo 卷的路径吗?
(如果我不写 node_module 卷,它会出错,但当我跳过 mongo 卷文件夹时不会出错。为什么?)