为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?
Posted
技术标签:
【中文标题】为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?【英文标题】:Why does my MongoDB data disappear when I convert my Meteor App to use Docker?为什么当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失? 【发布时间】:2021-10-21 11:56:56 【问题描述】:我最近将我的流星应用程序切换为使用 Docker,因为我正在尝试创建一个新的微服务。以前,我会使用 meteor run
在本地部署我的应用程序,但我已经切换到 docker-compose up --build
,使用项目根目录中的 docker-compose.yml 和 Meteor 应用程序目录中的 Dockerfile。我终于让事情运行起来了,这很好,但是我通过meteor run
启动应用程序时保留的所有数据都没有被正确访问。我知道数据仍然存在,因为当我尝试使用 meteor run
启动应用程序时,数据会从之前的会话中恢复。
这让我相信我没有通过 Docker 正确连接到 Mongo,如果能帮助我找到答案,我将不胜感激。
仅供参考,我正在连接到 一个 mongo 实例,它只是一个刚刚擦除的数据库。
docker-compose.yml:
version: '3'
services:
aldoa:
build:
context: ./js/app
dockerfile: Dockerfile
ports:
- '3000:3000'
links:
- mongo
environment:
ROOT_URL: $APP_ROOT_URL:-http://localhost
MONGO_URL: mongodb://mongo:27017/meteor
PORT: 3000
volumes:
- ./opt/app:/./js/app
mongo:
image: mongo:latest
ports:
- '27017:27017'
command:
- --storageEngine=wiredTiger
volumes:
- data:/data/db
volumes:
data:
提前致谢!
【问题讨论】:
【参考方案1】:然后您使用meteor
或meteor run
启动流星,您在开发模式下运行。在这种模式下,除非你明确定义了MONGO_URL
环境变量,否则meteor 将在端口3001 上启动它自己的mongo 实例(或者,准确地说,使用-p
加一指定的meteor 端口)。
在您的 docker 部署中,您正在为生产做正确的事情,并使用在默认端口 (27017) 上运行的单独启动的 mongo 实例。
您可以通过运行以下命令从开发实例中导出数据:
$ meteor
$ # in a separate terminal:
$ mongodump -p 3001 -d meteor
然后将其导入“真实”的 mongo 实例:
mongorestore /path/to/dump/created/above
【讨论】:
谢谢!我不得不使用--port,但这很有帮助。从现在开始,“真正的”mongo 实例将是端口 27017 上的实例 :)您对 docker-compose 中的卷有任何经验吗?也无法正常工作。 不,不是 docker 专家。但是这些问题很快就得到了回答——如果你的具体问题以前没有被问过和回答的话。 谢谢 :) 我最终做到了!周末愉快……如果你好奇的话:***.com/questions/68869063/…以上是关于为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?的主要内容,如果未能解决你的问题,请参考以下文章
当我将 JSON 从 Firebase 转换为 Java 对象时,为啥会出现“无法弹回输入”?
当我将基数为 10 的数字转换为基数为 2 的数字时,为啥位会重复?
如果我使用 Meteor,为啥需要 Angular? [关闭]
为啥 SQL Server 不允许我将 '21/04/17' 存储为日期?