上周我在 VPS 上折腾一个新项目,需要搭一个 MongoDB。说实话,我以前是直接源码编译安装的,折腾了两个小时,最后发现少了一个依赖库,心态崩了。后来朋友给我安利了 Docker 方案,一条命令搞定,真香。
这篇文章就是我踩完坑之后整理的保姆级教程,适合不想折腾编译、只想快速跑起来的开发者。
先确认 Docker 装好了
打开终端,跑一下:
docker --version
如果没装,执行这条就完事了:
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
装完记得等个十几秒让 Docker 服务起来,不然下一步会报错。
第一步:建网络和存数据的文件夹
先建一个自定义网络,方便后面其他服务跟 MongoDB 通信:
docker network create mongo-net
再建一个本地目录用来存数据。这一步很重要,不然容器一删数据全没了:
mkdir -p ~/mongo-data
第二步:启动 MongoDB
跑这条命令,一步到位:
docker run -d \
--name mongodb \
--network mongo-net \
-p 27017:27017 \
-v ~/mongo-data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=YourSecurePassword123! \
mongo:7.0
几个参数我解释一下:
--name mongodb:给容器起个名,后面好找-p 27017:27017:端口映射,容器内 27017 对外暴露-v ~/mongo-data:/data/db:数据持久化,容器删了数据还在MONGO_INITDB_ROOT_USERNAME和ROOT_PASSWORD:管理员账号密码,换成你自己的
说实话,我第一次启动的时候密码设得太简单了,结果被同事笑了一顿。建议密码至少 12 位,大小写+数字+符号混着用。
第三步:验证一下有没有跑起来
先看容器状态:
docker ps | grep mongodb
STATUS 显示 Up 就说明没问题。
然后进容器内部连一下:
docker exec -it mongodb mongosh -u admin -p YourSecurePassword123! --authenticationDatabase admin
进去之后跑两条命令:
db.adminCommand({ ping: 1 })
db.version()
返回 { ok: 1 } 和版本号,就说明一切正常。退出输入 exit 就行。
💡 小贴士:如果连上去报
unauthorized,大概率是密码输错了。检查一下docker run那行命令里的ROOT_PASSWORD和这里-p后面的密码是不是同一个。
第四步:创建业务用户
正式项目里肯定不会用 root 账户直连数据库。得创建一个专门的业务用户。
先进入 mongosh:
docker exec -it mongodb mongosh -u admin -p YourSecurePassword123! --authenticationDatabase admin
然后在 shell 里执行:
use myapp
db.createUser({
user: "myapp_user",
pwd: "MyAppPass456!",
roles: [{ role: "readWrite", db: "myapp" }]
})
创建完验证一下新用户能不能登:
mongosh --username myapp_user --password MyAppPass456! --authenticationDatabase myapp mongodb://localhost:27017/myapp
能连上就说明用户创建成功了。
远程连接怎么配
如果你要从别的机器连这台 MongoDB,注意两件事:
1. 防火墙放行 27017 端口
sudo ufw allow 27017/tcp
2. 连接字符串长这样
mongodb://myapp_user:MyAppPass456!@你的服务器IP:27017/myapp?authSource=myapp
把 你的服务器IP 换成实际的 IP 地址就行。
⚠️ 注意:生产环境建议不要把 MongoDB 直接暴露到公网。可以用 SSH 隧道或者 VPN 来连接,安全一点。我上次就把端口开给所有人了,结果被扫到了,吓得我赶紧关了😅
常见问题
Q1:容器启动完就退了?
看日志:docker logs mongodb。大部分情况是端口被占了,用 ss -tlnp | grep 27017 查一下。
Q2:怎么升级版本?
停旧容器、删掉、用新镜像重来一遍:
docker stop mongodb && docker rm mongodb
# 然后重新跑 docker run,把镜像改成 mongo:7.0.x
数据在挂载目录里,不会丢。
Q3:密码忘了怎么办?
以无认证模式启动一个临时容器,进去改密码:
docker run -d --name mongo-temp -p 27018:27017 mongo:7.0 --noauth
改完切回正常模式就行了。
Q4:磁盘满了?
docker system prune -a
docker volume prune
顺便把旧数据清一下。记得定期备份,别等硬盘满了才想起来。
最后说两句
Docker 部署 MongoDB 的核心就是一行 docker run。数据挂载保命,认证模式保安全,多用户管理应付实际项目。搞定这一步,后面接 Node.js、Python 或者 Go 应用都顺了。
如果你也在找 MongoDB 的在线管理工具,可以试试我们网站的 JSON 格式化工具,调试 API 返回的 BSON 数据也挺好用的。