0. 为什么不是只用原生 MongoDB
我使用 Docker 部署 Atlas Local,主要是为了在服务端获得 Atlas Search(默认 BM25 相关评分)能力;而原生 MongoDB 的 $text 检索能力更基础。
简单理解:
- 原生 MongoDB(自建)支持
$text与 text index,可做基础全文检索。 - Atlas Search 提供更完整的搜索能力与评分机制(默认 BM25 相关)。
mongodb-atlas-local可以在本地/服务端快速体验和验证这套能力。
官方参考文档:
1. 适用场景
mongodb/mongodb-atlas-local 适合在测试机、开发机、演示环境中快速获得 Atlas 本地能力。本文重点是"服务端可长期运行"的部署方式。
2. 服务器前置条件
- Linux 服务器一台(建议 2C4G 起步)。
- 已安装 Docker 与 Docker Compose(
docker compose)。 - 服务器放通你要映射的端口(例如 27017/27018)。
- 建议使用独立磁盘或目录做数据持久化。
3. 快速验证(docker run)
先用 docker run 验证镜像与环境是否正常。
ini
docker run -d \
--name atlas-local \
--hostname mongodb \
-e MONGODB_INITDB_ROOT_USERNAME=admin \
-e MONGODB_INITDB_ROOT_PASSWORD='StrongPass_123' \
-p 27017:27017 \
mongodb/mongodb-atlas-local
查看状态:
lua
docker ps
docker logs -f atlas-local
如果要停止并删除:
bash
docker rm -f atlas-local
4. 推荐部署(Docker Compose,适合长期运行)
在服务器目录(如 /opt/atlas-local)新建 docker-compose.yaml:
bash
services:
mongodb:
image: mongodb/mongodb-atlas-local:latest
hostname: mongodb
container_name: atlas-local-mongodb
restart: unless-stopped
environment:
- MONGODB_INITDB_ROOT_USERNAME=${MONGODB_USER:-admin}
- MONGODB_INITDB_ROOT_PASSWORD=${MONGODB_PASS:-password}
- MONGOT_LOG_FILE=/dev/stderr
- RUNNER_LOG_FILE=/dev/stderr
ports:
- "${MONGODB_PORT:-27017}:27017"
volumes:
- mongo_data:/data/db
- mongo_config:/data/configdb
- mongo_mongot:/data/mongot
volumes:
mongo_data:
mongo_config:
mongo_mongot:
启动:
docker compose up -d
检查:
docker compose ps
docker compose logs -f mongodb
5. 连接验证
在服务器本机验证:
ini
mongosh "mongodb://admin:password@127.0.0.1:27017/?directConnection=true"
远程机器连接时,把 127.0.0.1 改为服务器公网 IP 或内网 IP,并确保安全组/防火墙已放通端口。
6. 从 mongo 镜像迁移到 mongodb-atlas-local 注意点
如果你已有 mongo:8.x 的 Compose 文件,迁移时注意:
- 删除旧配置中的
command,避免覆盖mongodb-atlas-local的默认入口。 - 不需要再手动定义额外健康检查。
- 保留持久化卷目录:
/data/db与/data/configdb。
7. 生产化建议(服务端)
- 不要在公网裸露数据库端口;优先内网访问或配合堡垒机/VPN。
- 强密码不要写死在 Compose,建议改为
.env注入。 - 开启
restart: unless-stopped,保证机器重启后自动恢复。 - 升级时先备份卷数据,再执行
docker compose pull && docker compose up -d。 - 使用
docker stats、日志平台或监控系统观察内存和连接数。
8. 常见问题
-
端口冲突:
- 现象:容器起不来或连接失败。
- 处理:改映射端口,例如
27018:27017。
-
认证失败:
- 现象:
Authentication failed。 - 处理:确认用户名密码与连接串一致,注意特殊字符转义。
- 现象:
-
数据丢失:
- 现象:重启后库表没了。
- 处理:确认已挂载 volume,并且没有执行
down -v。
9. 一句话结论
服务端部署优先用 docker compose + 数据卷 + 自动重启,先保证"稳定可用",再谈后续功能扩展。
10. 参考链接
-
Atlas Search 评分(默认 BM25):
-
原生 MongoDB text index /
$text(并说明 Atlas Search 更适合高级全文检索): -
Atlas Local Docker 部署(官方):