Meteor应用改用Docker部署后MongoDB原有数据消失该如何解决?
问题根因
你本地直接执行meteor run启动应用时,默认使用Meteor内置的本地Mongo实例,数据存储在项目目录的.meteor/local/db路径下。而你当前docker-compose配置启动的是独立的Mongo容器,使用Docker创建的全新命名卷存储数据,两个Mongo实例完全独立,因此Docker环境下访问的是空库。
解决方法
方案一:导出本地旧数据导入Docker Mongo实例
- 保留本地
meteor run启动的应用进程,在终端执行命令导出旧数据:
mongodump -h 127.0.0.1:3001 -d meteor -o ./meteor-dumpMeteor本地Mongo默认端口为3001,默认数据库名为meteor,导出的数据会存储在当前目录的
meteor-dump文件夹中。
2. 执行docker-compose up -d确保Docker Mongo容器正常运行,执行以下命令将导出的数据导入Docker Mongo:# 先查询Mongo容器ID docker ps | grep mongo # 将导出的dump文件拷贝到容器内 docker cp ./meteor-dump/meteor <替换为你的Mongo容器ID>:/tmp/ # 进入容器执行数据导入 docker exec -it <替换为你的Mongo容器ID> mongorestore -d meteor /tmp/meteor导入完成后重启Meteor服务即可看到旧数据。
- 保留本地
方案二:直接挂载本地旧数据目录到Docker Mongo
如果你希望Docker Mongo直接使用本地的旧数据文件,可以修改docker-compose.yml中mongo服务的volumes配置:mongo: image: mongo:latest ports: - '27017:27017' command: - --storageEngine=wiredTiger volumes: - 替换为你的本地项目全路径/.meteor/local/db:/data/db注意修改前需要先备份本地数据,且确保本地Mongo版本和Docker使用的Mongo版本兼容,避免启动报错。
其他配置优化
你当前配置中aldoa服务的volumes路径写法不规范,./opt/app:/./js/app中冒号后的容器内路径/./js/app可以简化为/js/app,避免路径识别异常。
内容的提问来源于stack exchange,提问作者Jake Wright
相关产品推荐
相关产品推荐

