Mongodb Docker compose mongo不会创建根用户

Mongodb Docker compose mongo不会创建根用户,mongodb,docker,Mongodb,Docker,我正在尝试创建一个docker容器和一个mongo图像。我希望容器有一个名为admin的root用户,并且能够创建一个名为experts\u db的数据库。这是我的docker compose.yaml: version: '3.7' services: mongodb: image: mongo:4.0.4 container_name: mongodbtest restart: always env_file: .en

我正在尝试创建一个docker容器和一个mongo图像。我希望容器有一个名为
admin
的root用户,并且能够创建一个名为
experts\u db
的数据库。这是我的
docker compose.yaml

version: '3.7'

services:
    mongodb:
        image: mongo:4.0.4
        container_name: mongodbtest
        restart: always
        env_file: .env
        environment:
            MONGO_INITDB_ROOT_USERNAME: admin
            MONGO_INITDB_ROOT_PASSWORD: 123456789
            MONGO_INITDB_DATABASE: experts_db
        ports:
            - 27017:27017
        volumes:
             - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
这是我的
mongo init.js
文件:

use admin;

db.createUser(
        {
            user: "andrea",
            pwd: "123456789",
            roles: [
                "userAdminAnyDatabase",
                   "dbAdminAnyDatabase",
                   "readWriteAnyDatabase"

            ]
        }
);

尽管如此,当我在mongo shell中并尝试获取所有用户的列表时,我得到以下错误:

use experts_db
switched to db experts_db
> db.getUsers()
2020-01-22T14:30:00.569+0000 E QUERY    [js] Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1763:1
@(shell):1:1

有人知道为什么会这样吗?我是mongo的新手,不知道如何修复此问题。我已经测试了下面的JS脚本,它可以正常工作:

db.createUser(
{
    user: "aaa",
    pwd: "123",
    roles: [ { role: "readAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" }]
});

创建之后,您可以跳到mongoDB shell上并运行db.getUsers()以确保用户已成功创建

您需要删除容器中的数据/db/卷,然后重新运行并重新生成

rm -rf data/db/
docker-compose up --build

什么是
使用adminjs文件中的行?看起来不像JavaScriptor您知道docker实例是否正确执行JS文件吗?您是否可以尝试先在本地(容器外部)测试它以确保JS文件工作?很高兴知道它在容器外部工作。请尝试如下方式装载卷:./mongo init.js:/docker-entrypoint-initdb.d/mongo-init.js(末尾不带:ro)。