2026/4/6 8:39:05
网站建设
项目流程
你有没有遇到过这样的场景要开发一个Node.js应用需要用到MongoDB。你打开官网找到下载链接下载安装包下一步下一步配置环境变量启动服务……折腾半小时终于跑起来了。换台电脑再来一遍。烦不烦今天我们用Docker来彻底解决这个问题。一条命令MongoDB就跑起来了再一条命令可视化管理界面也有了。换电脑换系统一样的命令一样的体验。一、我们要搭什么一个简单的Node.js后端应用连接MongoDB数据库再加一个Mongo Express做可视化管理界面。架构很简单Node.js跑在宿主机上暂时不打成镜像MongoDB跑在Docker容器里Mongo Express也跑在Docker容器里两个容器需要能互相通信并且Node.js要能访问MongoDB。二、第一步拉取镜像先把需要的镜像拉下来docker pull mongo docker pull mongo-expressMongoDB是数据库本体Mongo Express是它的Web管理界面类似phpMyAdmin之于MySQL。三、第二步创建Docker网络两个容器需要互相通信。Docker的默认网络模式是bridge但为了让它们能通过容器名互相访问最好创建一个自定义网络docker network create mongo-network查看一下docker network ls你会看到新创建的mongo-network。四、第三步启动MongoDB容器docker run -p 27017:27017 -d \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORDpassword \ --name mongodb \ --net mongo-network \ mongo参数解释参数作用-p 27017:27017把容器的27017端口映射到宿主机供Node.js访问-d后台运行-e设置环境变量初始化root账号密码--name mongodb给容器起个名字方便其他容器通过这个名字访问--net mongo-network把容器加入我们创建的网络启动后用docker logs mongodb看一下日志看到“waiting for connections”就说明好了。五、第四步启动Mongo Express容器docker run -p 8081:8081 -d \ -e ME_CONFIG_MONGODB_ADMINUSERNAMEadmin \ -e ME_CONFIG_MONGODB_ADMINPASSWORDpassword \ -e ME_CONFIG_MONGODB_SERVERmongodb \ --name mongo-express \ --net mongo-network \ mongo-express注意这一行-e ME_CONFIG_MONGODB_SERVERmongodb这里填的是MongoDB的容器名不是IP也不是localhost。因为两个容器在同一个自定义网络里Docker会自动做DNS解析让它们能通过容器名找到对方。这是容器互联最关键的一点也是初学者最容易踩的坑。启动后访问http://localhost:8081就能看到Mongo Express的界面了。用admin/password登录创建一个叫user-account的数据库。六、第五步Node.js应用连接数据库在Node.js代码里连接MongoDB的URI是mongodb://admin:passwordlocalhost:27017因为Node.js跑在宿主机上不是容器里所以用localhost加映射出来的端口27017。配置好连接信息启动Node.js应用。修改用户信息保存刷新页面——数据还在。去Mongo Express里刷新也能看到数据已经写进去了。大功告成。七、如果出问题了怎么办用docker logs查看日志。比如查看MongoDB的日志docker logs mongodb实时跟踪日志docker logs -f mongodb这样你就能看到连接有没有成功认证有没有通过错误在哪里。写在最后这个例子虽然简单但它展示了一个非常实用的本地开发模式依赖服务数据库、缓存、消息队列用Docker跑主应用代码跑在宿主机上方便调试所有环境配置一条命令搞定换电脑也不怕