尝试使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
这里发生了什么事?
提前致谢
我认为您需要将环境更改为:
MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD
这些变量一起使用,可以创建一个新用户并设置该用户的密码。该用户是在admin身份验证数据库中创建的,并具有root角色,即root(超级用户)角色。
查看文件
另一个说明:
如果您不随JavaScript文件一起插入数据,则不会创建数据库。
MONGO_INITDB_DATABASE
该变量允许您在/docker-entrypoint-initdb.d/*.js中指定用于创建脚本的数据库的名称(请参阅下面的初始化新实例)。MongoDB从根本上设计为“首次使用时创建”,因此,如果您不随JavaScript文件一起插入数据,则不会创建数据库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句