Mongo安装

Mongo安装

概述

本文档涵盖 MongoDB 的 Docker 部署方法,包含用户名密码认证、数据持久化和资源限制配置,适用于开发测试及轻量级生产场景。

核心能力

  • 用户名密码认证保护
  • 数据持久化
  • 资源限制管理

部署

1. 创建数据目录

mkdir -p ./mongo/data

2. 创建 Docker Compose 编排文件

docker-compose.yaml

services:
  mongo:
    image: mongo:latest
    container_name: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
    ports:
      - "27017:27017"
    volumes:
      - ./mongo/data:/data/db
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: "512M"

3. 环境变量说明

变量 必填 说明
MONGO_INITDB_ROOT_USERNAME root 用户名
MONGO_INITDB_ROOT_PASSWORD root 用户密码
TZ 时区设置

启动

docker compose up -d

查看启动日志:

docker logs mongo -f --tail=50

验证

# 进入容器连接 MongoDB
docker exec -it mongo mongosh -u root -p 123456

# 或使用外部客户端(需安装 mongosh)
mongosh "mongodb://root:123456@127.0.0.1:27017"

常用管理命令

操作 命令
启动 MongoDB docker compose up -d
停止 MongoDB docker compose stop
重启 MongoDB docker compose restart
查看状态 docker compose ps
查看日志 docker logs mongo -f --tail=100
进入容器 docker exec -it mongo /bin/bash
连接 MongoDB(容器内) docker exec -it mongo mongosh -u root -p 123456

导入与导出

导入数据

# JSON 导入
docker exec -i mongo mongoimport -u root -p 123456 --authenticationDatabase admin -d test -c users < /path/to/users.json

# BSON 导入
docker exec -i mongo mongorestore -u root -p 123456 --authenticationDatabase admin --archive=/path/to/backup.archive

导出数据

# JSON 导出
docker exec mongo mongoexport -u root -p 123456 --authenticationDatabase admin -d test -c users > users.json

# BSON 导出
docker exec mongo mongodump -u root -p 123456 --authenticationDatabase admin --archive=backup.archive

常见问题与注意事项

连接被拒绝

  1. 检查端口是否被占用:
netstat -tlnp | grep 27017
  1. 确认防火墙已放行 27017 端口:
firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --reload

认证失败

确认连接时指定了正确的认证数据库(MongoDB 默认使用 admin 作为认证数据库):

# 正确示例(连接命令)
mongosh "mongodb://root:123456@127.0.0.1:27017"

# 或使用 --authenticationDatabase 参数
mongosh -u root -p 123456 --authenticationDatabase admin

数据持久化

数据存储在 ./mongo/data 目录,删除该目录会丢失所有数据,删除前请先备份。

创建额外用户

docker exec -it mongo mongosh -u root -p 123456
use test
db.createUser({
  user: "appuser",
  pwd: "apppass",
  roles: [{ role: "readWrite", db: "test" }]
})

自定义配置文件

# 创建配置文件
cat > ./mongo/mongod.conf <<EOF
systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /data/db
net:
  bindIp: 0.0.0.0
  port: 27017
security:
  authorization: enabled
EOF

修改 docker-compose.yaml 挂载配置:

volumes:
  - ./mongo/data:/data/db
  - ./mongo/mongod.conf:/etc/mongod.conf

参考链接