Docker装MongoDB太麻烦了?我3分钟搞定,附踩坑记录

上周我在 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_USERNAMEROOT_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 数据也挺好用的。

这篇文章对你有帮助吗?