Docker Compose MongoDB的docker-entrypoint-initdb.d无法工作

10

我正在使用以下docker-compose文件

version: '3.7'
services:
 db_container:
  image: mongo:latest
  restart: always
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: password
    MONGO_INITDB_DATABASE: root-db
  ports:
    - 27017:27017
  volumes:
    - ./database/initdb.js:/docker-entrypoint-initdb.d/initdb.js:ro
    - ./data:/data/db

这是我的 initdb.js 文件

db.createUser(
{
  user: "api-test",
  pwd: "api-test",
  roles: [
    {
      role: "readWrite",
      db: "api-test"
    }
  ]
}
);

我只能看到3个数据库,无法连接到 api-test 数据库

图片描述

如果有遗漏,请帮我检查一下,谢谢。


您没有 api-test 数据库。您需要先创建吗? - Valijon
@Valijon,我正在尝试实现每当我运行docker-compose up命令时,它都应该在docker中创建mongob镜像,并带有api-test数据库和用户。 - Munish Kapoor
尝试将 MONGO_INITDB_DATABASE: root-db 更改为 MONGO_INITDB_DATABASE: api-test来源 - Valijon
我已经尝试过了,甚至在MongoDB Compass中也看不到root-db。 - Munish Kapoor
不要连 这个 都不试?尝试进入 Docker 镜像并手动运行,可能会遇到某些权限问题。 - Valijon
不是,我正在尝试使用docker-compose文件,那个是Docker文件。 - Munish Kapoor
2个回答

24
能够通过以下文章的帮助解决问题:Docker-Compose mongoDB Prod, Dev, Test Environment 文件结构应该是:
Project
├── docker-compose.yml (File)
├── docker-entrypoint-initdb.d (Directory)
│   ├── mongo-init.js (File)

docker-compose.yml文件

version: '3.7'

services:
   mongo:
    container_name: container-mongodb
    image: mongo:latest
    restart: always
    ports:
      - 27017:27017

    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: root-db

    volumes:
      - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro

mongo-init.js 文件

print('Start #################################################################');

db = db.getSiblingDB('api_prod_db');
db.createUser(
  {
    user: 'api_user',
    pwd: 'api1234',
    roles: [{ role: 'readWrite', db: 'api_prod_db' }],
  },
);
db.createCollection('users');

db = db.getSiblingDB('api_dev_db');
db.createUser(
  {
    user: 'api_user',
    pwd: 'api1234',
    roles: [{ role: 'readWrite', db: 'api_dev_db' }],
  },
);
db.createCollection('users');

db = db.getSiblingDB('api_test_db');
db.createUser(
  {
    user: 'api_user',
    pwd: 'api1234',
    roles: [{ role: 'readWrite', db: 'api_test_db' }],
  },
);
db.createCollection('users');

print('END #################################################################');


这会在容器内抛出一个错误:Error: EISDIR:对目录的非法操作,读取。 - Gabriel Lins

3
尽管我的设置是正确的,删除了卷,修改了数据库等等,但这些对我都没有用。唯一的方法是更改docker-compose中mongodb容器的名称,将改为,然后它就可以工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接