为啥当我将 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】:

然后您使用meteormeteor 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' 存储为日期?

为啥将 SQL Real 转换为 Numeric 时比例会略有增加?

为啥 .meteor 有一个 .gitignore 文件?