0. 为什么不是只用原生 MongoDB

我使用 Docker 部署 Atlas Local,主要是为了在服务端获得 Atlas Search(默认 BM25 相关评分)能力;而原生 MongoDB 的 $text 检索能力更基础。

简单理解:

  1. 原生 MongoDB(自建)支持 $text 与 text index,可做基础全文检索。
  2. Atlas Search 提供更完整的搜索能力与评分机制(默认 BM25 相关)。
  3. mongodb-atlas-local 可以在本地/服务端快速体验和验证这套能力。

官方参考文档:

1. 适用场景

mongodb/mongodb-atlas-local 适合在测试机、开发机、演示环境中快速获得 Atlas 本地能力。本文重点是“服务端可长期运行”的部署方式。

2. 服务器前置条件

  1. Linux 服务器一台(建议 2C4G 起步)。
  2. 已安装 Docker 与 Docker Compose(docker compose)。
  3. 服务器放通你要映射的端口(例如 27017/27018)。
  4. 建议使用独立磁盘或目录做数据持久化。

3. 快速验证(docker run)

先用 docker run 验证镜像与环境是否正常。

1
2
3
4
5
6
7
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

查看状态:

1
2
docker ps
docker logs -f atlas-local

如果要停止并删除:

1
docker rm -f atlas-local

4. 推荐部署(Docker Compose,适合长期运行)

在服务器目录(如 /opt/atlas-local)新建 docker-compose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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:

启动:

1
docker compose up -d

检查:

1
2
docker compose ps
docker compose logs -f mongodb

5. 连接验证

在服务器本机验证:

1
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 文件,迁移时注意:

  1. 删除旧配置中的 command,避免覆盖 mongodb-atlas-local 的默认入口。
  2. 不需要再手动定义额外健康检查。
  3. 保留持久化卷目录:/data/db/data/configdb

7. 生产化建议(服务端)

  1. 不要在公网裸露数据库端口;优先内网访问或配合堡垒机/VPN。
  2. 强密码不要写死在 Compose,建议改为 .env 注入。
  3. 开启 restart: unless-stopped,保证机器重启后自动恢复。
  4. 升级时先备份卷数据,再执行 docker compose pull && docker compose up -d
  5. 使用 docker stats、日志平台或监控系统观察内存和连接数。

8. 常见问题

  1. 端口冲突:

    • 现象:容器起不来或连接失败。
    • 处理:改映射端口,例如 27018:27017
  2. 认证失败:

    • 现象:Authentication failed
    • 处理:确认用户名密码与连接串一致,注意特殊字符转义。
  3. 数据丢失:

    • 现象:重启后库表没了。
    • 处理:确认已挂载 volume,并且没有执行 down -v

9. 一句话结论

服务端部署优先用 docker compose + 数据卷 + 自动重启,先保证“稳定可用”,再谈后续功能扩展。

10. 参考链接