docker-compose mongodb新鲜实例不起作用

时间:2019-10-22 06:23:15

标签: mongodb docker docker-compose

尝试使docker-compose符合以下条件:

    version: '3.1'

    services:
      mongo:
        image: mongo
        container_name: mongo-db
        networks:
          - mongo
        restart: always
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        ports:
          - 27017:27017
        volumes:
          - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
      mongo-express:
        image: mongo-express:latest
        container_name: mongo-express
        restart: always
        networks:
          - mongo
        depends_on:
          - mongo
        ports:
          - 8081:8081
        environment:
          ME_CONFIG_MONGODB_SERVER: mongo
          ME_CONFIG_MONGODB_PORT: 27017
          ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_ROOT_USER}
          ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_ROOT_PASSWORD}

入口点js文件如下:

db.createUser(
    {
        user: "dba",
        pwd: "dba",
        roles: [
            {
                role: "readWrite",
                db: "mydb"
            }
        ]
    }
);

变量在.env文件中定义如下:

MONGO_ROOT_USER=root
MONGO_ROOT_PASSWORD=root
MONGO_INITDB_DATABASE=mydb
MONGOEXPRESS_LOGIN=dev
MONGOEXPRESS_PASSWORD=dev

当我登录mongo-express时,看不到mongo-init.js创建的用户或数据库 另外,如果我尝试使用以下方式进行连接,则无法登录:

docker exec -it mongo-db mongo --username dba

但是,如果使用以下命令,我可以连接,但运行show dbs时仍然看不到mydb:

docker exec -it mongo-db mongo --username root

这是怎么回事?

预先感谢

1 个答案:

答案 0 :(得分:0)

我认为您需要将环境更改为:

MONGO_INITDB_ROOT_USERNAME  
MONGO_INITDB_ROOT_PASSWORD
  

这些变量结合使用可创建一个新用户并设置   用户的密码。该用户是在管理员身份验证中创建的   数据库并具有root角色,这是一个“超级用户”角色。

请参见Docs

另一个说明:

如果未在JavaScript文件中插入数据,则不会创建数据库。

  

MONGO_INITDB_DATABASE

     

此变量允许您指定要使用的数据库的名称   /docker-entrypoint-initdb.d/*.js中的创建脚本(请参阅   在下面初始化一个新实例)。 MongoDB从根本上讲   设计用于“首次使用时创建”,因此如果您不使用   您的JavaScript文件,则不会创建数据库。