为什么当我将我的 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据消失了?

Why does my MongoDB data disappear when I convert my Meteor App to use Docker?

我最近将我的流星应用切换为使用 Docker,因为我正在尝试创建一个新的微服务。以前,我会使用 meteor run 在本地部署我的应用程序,但我已经切换到 docker-compose up --build 在我的项目的根目录使用 docker-compose.yml 和 Docker 我的 Meteor 应用程序目录中的文件。我终于得到了东西 运行,这很棒,但是我通过 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:

提前致谢!

然后你在开发模式下使用 meteormeteor run 你 运行 启动流星。在那种模式下,除非你明确定义了 MONGO_URL 环境变量,否则 meteor 将在端口 3001 上启动它自己的 mongo 实例(或者,准确地说,用 -p 加一指定的流星端口).

在您的 docker 部署中,您正在为生产做正确的事情,并在默认端口 (27017) 上使用单独启动的 mongo 实例 运行ning。

您可以通过 运行ning:

从开发实例中导出数据
$ meteor
$ # in a separate terminal:
$ mongodump -p 3001 -d meteor

然后将其导入“真实”mongo 实例:

mongorestore /path/to/dump/created/above