You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 18.04下Docker容器加载现有项目时Mongo数据库连接失败求助

解决MongoDB连接项目数据库的问题

看起来你现在的核心问题是本地mongod服务和Docker Mongo容器端口冲突,以及连接时指向了错误的实例导致找不到项目数据库。我帮你一步步梳理解决方案:

第一步:先解决端口冲突问题

你同时启动了本地mongod服务和Docker Mongo容器,两者默认都占用27017端口,这必然会导致冲突。首先要彻底清理所有Mongo相关进程:

# 停止本地mongod服务
sudo service mongod stop
# 停止并移除Docker Mongo容器
sudo docker stop <你的Mongo容器名>
sudo docker rm <你的Mongo容器名>
# 检查是否还有残留的mongod进程
ps aux | grep mongod
# 如果有输出,用kill命令终止对应PID
sudo kill <查到的PID>

第二步:确定项目依赖的Mongo实例

你需要明确你的项目是用本地安装的MongoDB还是Docker容器里的MongoDB,二选一即可:

选项A:使用本地安装的MongoDB

  1. 修复并确认数据库文件
    之前你删除过.lock文件,可能需要修复数据库完整性:

    sudo mongod --repair --dbpath /var/lib/mongodb
    

    这个路径是Ubuntu上Mongo默认的数据存储目录,你可以检查这里是否有你项目数据库的文件(通常是你的数据库名.ns和一系列你的数据库名.*文件)。

  2. 启动本地mongod服务

    sudo service mongod start
    

    之后用sudo service mongod status确认服务正常运行。

  3. 验证数据库是否存在
    进入Mongo shell:

    sudo mongo
    

    在shell里执行:

    show dbs
    use 你的项目数据库名
    show collections
    

    如果能看到对应的数据,说明数据库没问题;如果看不到,要么是数据库文件丢失,要么是后端连接字符串配置错误(检查后端代码里的数据库URL是否是mongodb://127.0.0.1:27017/你的项目数据库名)。

选项B:使用Docker容器的MongoDB

  1. 禁用本地mongod服务(避免后续冲突)

    sudo service mongod stop
    sudo systemctl disable mongod
    
  2. 检查Docker Compose配置
    打开deploy/docker-compose.yml,确认Mongo的卷配置(确保数据持久化,不会因为容器重启丢失):

    mongo:
      image: mongo
      ports:
        - "27017:27017"
      volumes:
        - ./mongo-data:/data/db  # 这条很重要,把容器内的数据映射到本地目录
      restart: always
    
  3. 重新启动Mongo容器

    cd deploy
    sudo docker-compose up -d mongo
    
  4. 验证容器内的数据库
    进入容器的Mongo shell:

    sudo docker exec -it <你的Mongo容器名> mongo
    

    同样执行show dbsuse 你的项目数据库名检查数据是否存在。如果没有,可能是之前的卷没有正确挂载,导致数据丢失,需要从备份恢复,或者重新初始化数据库。

第三步:重启前后端服务

确认Mongo实例正常且数据库存在后,按顺序重启服务:

  1. 后端目录执行npx nodemon backend
  2. 前端目录执行ng serve frontend

关键注意点

  • 不要同时启动本地mongod和Docker Mongo容器,端口冲突会导致各种奇怪问题
  • 执行sudo mongo时默认进入test库,这是正常现象,需要手动use 你的项目数据库名切换到目标库
  • 永远不要手动执行sudo mongod(除非调试),通过服务或Docker管理进程更稳定

内容的提问来源于stack exchange,提问作者Lisonallie

火山引擎 最新活动