部署 mongodb - docker-compose.yml

创建日期: 2022-09-01 14:03 | 作者: 风波 | 浏览次数: 14 | 分类: MongoDB

1. 使用 docker-compose.yml 部署 mongo

docker-compose.yml 文件内容如下:

version: '3.1'

services:
  mongo:
    image: mongo:6
    container_name: mongo_server
    restart: always
    ports:
      - "27017:27017"
    volumes:
      - ./db:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: username
      MONGO_INITDB_ROOT_PASSWORD: password

注:这里指定的用户名和密码,是管理账户,而不是数据库的账户。如果需要创建数据库账户,需要在 /docker-entrypoint-initdb.d/ 目录中的初始化脚本中自己创建。

2. 初始化数据库

mongodb 官方 Docker 镜像会在初次启动时执行 /docker-entrypoint-initdb.d/ 目录中的脚本文件,执行书序按照文件名的字母序。

初始化 mongo 数据的脚本 init.js 如下:

db.createUser(
  {
    user: "username",
    pwd: "password",
    roles: [ { role: "readWrite", db: "database_name" } ]
  }
);

除了在 init.js 脚本中增加创建账户的命令,还需要在 docker-compose.yml 中增加环境变量 MONGO_INITDB_DATABASE: foundry_connector,用来指定执行 init.js 脚本是使用的数据库。

完整的 docker-compose.yml 配置如下:

version: '3.1'

services:
  infra_mongo:
    image: mongo:6
    container_name: infra_mongo
    restart: always
    ports: 
      - "27017:27017"
    volumes:
      - ./db:/data/db
      - ./init.js:/docker-entrypoint-initdb.d/1.js:ro
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: pass
      MONGO_INITDB_DATABASE: database_name

3. 使用如下命令验证部署情况

$ docker-compose exec -it infra_mongo mongosh
db.runCommand(
   {
      hello: 1
   }
)
14 浏览
0 评论