Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Docker:MongoDB初始化脚本无法运行-身份验证错误_Javascript_Mongodb_Docker - Fatal编程技术网

Javascript Docker:MongoDB初始化脚本无法运行-身份验证错误

Javascript Docker:MongoDB初始化脚本无法运行-身份验证错误,javascript,mongodb,docker,Javascript,Mongodb,Docker,我正在为MongoDB容器扩展docker-compose.yml。我想添加一些初始数据 docker compose.yml的如下所示: version: '3.1' services: mongo: image: mongo restart: always ports: - 27017:27017 environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_R

我正在为MongoDB容器扩展docker-compose.yml。我想添加一些初始数据

docker compose.yml的
如下所示:

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - mongo-data:/data/db:cached
      - ./fixtures/mongo_import.js:/docker-entrypoint-initdb.d/mongo_import.js

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: root
      ME_CONFIG_BASICAUTH_USERNAME: root 
      ME_CONFIG_BASICAUTH_PASSWORD: root

volumes:
  mongo-data:
    driver: local
db.auth('root', 'root')

db = db.getSiblingDB('licensing')

db.createUser({
  user: 'root',
  pwd: 'root',
  roles: [
    {
      role: 'root',
      db: 'admin',
    },
  ],
});
当我运行这个脚本时,我在mongo容器日志中发现一个错误,即用户根不存在

因此,我创建了一个mongo_import.js脚本,它如下所示:

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - mongo-data:/data/db:cached
      - ./fixtures/mongo_import.js:/docker-entrypoint-initdb.d/mongo_import.js

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: root
      ME_CONFIG_BASICAUTH_USERNAME: root 
      ME_CONFIG_BASICAUTH_PASSWORD: root

volumes:
  mongo-data:
    driver: local
db.auth('root', 'root')

db = db.getSiblingDB('licensing')

db.createUser({
  user: 'root',
  pwd: 'root',
  roles: [
    {
      role: 'root',
      db: 'admin',
    },
  ],
});
它不起作用。当我转到这个容器中的shell并运行
mongo mongo_import.js
时,我得到:

# mongo mongo_import.js
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b148691b-d585-48e9-9cdd-1d58ad4a4294") }
MongoDB server version: 4.0.10
Error: Authentication failed.
2019-05-31T10:21:36.788+0000 E QUERY    [js] Error: couldn't add user: not authorized on licensing to execute command { createUser: "root", pwd: "xxx", roles: [ { role: "root", db: "admin" } ], digestPassword: true, writeConcern: { w: "majority", wtimeout: 600000.0 }, lsid: { id: UUID("b148691b-d585-48e9-9cdd-1d58ad4a4294") }, $db: "licensing" } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1491:15
@mongo_import.js:5:1
failed to load: mongo_import.js
我做错了什么?

您必须添加

MONGO_INITDB_DATABASE=admin
添加到您的环境变量

如果使用
.js
脚本,则必须使用变量
MONGO\u INITDB\u database
定义auth数据库

如果未设置此值,脚本将在
test
数据库中进行身份验证