Skip to content

使用 Docker Compose 安装 MongoDB 的步骤如下:

1. 创建项目目录

bash
mkdir mongodb && cd mongodb && mkdir -p data/db  && chmod -R 777 ./data/db
mkdir mongodb && cd mongodb && mkdir -p data/db  && chmod -R 777 ./data/db

2. 创建 docker-compose.yml 文件

yaml
version: '3.8'

services:
  mongodb:
    image: mongo:8.0.11  # 使用官方MongoDB镜像
    container_name: mongodb
    restart: always
    ports:
      - "27017:27017"    # 暴露默认端口
    environment:
      MONGO_INITDB_ROOT_USERNAME: root      # 初始化管理员用户名
      MONGO_INITDB_ROOT_PASSWORD: 123456  # 初始化管理员密码
    volumes:
      - ./data/db:/data/db                # 持久化数据存储
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro  # 初始化脚本
version: '3.8'

services:
  mongodb:
    image: mongo:8.0.11  # 使用官方MongoDB镜像
    container_name: mongodb
    restart: always
    ports:
      - "27017:27017"    # 暴露默认端口
    environment:
      MONGO_INITDB_ROOT_USERNAME: root      # 初始化管理员用户名
      MONGO_INITDB_ROOT_PASSWORD: 123456  # 初始化管理员密码
    volumes:
      - ./data/db:/data/db                # 持久化数据存储
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro  # 初始化脚本

3. 创建数据目录(可选)

bash
vim data/db/mongo-init.js
vim data/db/mongo-init.js

4. 创建初始化脚本(可选)

创建 mongo-init.js 文件初始化数据库/用户:

javascript
// mongo-init.js
db.createUser({
  user: 'myuser',
  pwd: 'mypassword',
  roles: [
    { role: 'readWrite', db: 'mydatabase' }
  ]
});
// mongo-init.js
db.createUser({
  user: 'myuser',
  pwd: 'mypassword',
  roles: [
    { role: 'readWrite', db: 'mydatabase' }
  ]
});

5. 启动 MongoDB

bash
docker-compose up -d
docker-compose up -d

6. 验证安装

bash
# 查看容器状态
docker-compose ps

# 进入容器执行命令
docker exec -it mongodb-container mongosh -u root -p 123456
# 查看容器状态
docker-compose ps

# 进入容器执行命令
docker exec -it mongodb-container mongosh -u root -p 123456

7. 连接 MongoDB

  • 本地连接mongodb://root:123456@localhost:27017
  • 应用连接:使用服务名 mongodb://root:123456@mongodb:27017(在Docker网络内)

关键配置说明:

  1. 持久化存储
    volumes 将主机 ./data/db 映射到容器内 /data/db,确保数据不丢失

  2. 安全认证
    通过环境变量设置管理员凭据:

    yaml
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
  3. 自定义初始化
    挂载脚本到 /docker-entrypoint-initdb.d/ 目录,容器首次启动时自动执行

  4. 端口映射
    ports 将容器 27017 端口映射到主机 27017 端口


常用命令:

命令说明
docker-compose up -d启动服务
docker-compose down停止并删除容器
docker-compose logs查看日志
docker-compose stop停止服务
docker-compose start启动已停止的服务

注意事项:

  1. 生产环境安全

    • 务必修改默认密码 123456
    • 避免使用 root 账户直接连接应用
    • 考虑使用 Docker secrets 管理敏感信息
  2. 数据备份
    定期备份主机上的 ./data/db 目录

  3. 版本控制
    建议指定镜像版本(如 mongo:6.0)而非 latest

  4. 网络隔离
    docker-compose.yml 中添加自定义网络提升安全性:

    yaml
    networks:
      mynet:
        driver: bridge
    services:
      mongodb:
        networks:
          - mynet
    networks:
      mynet:
        driver: bridge
    services:
      mongodb:
        networks:
          - mynet