mongo docker容器无法访问本地主机数据

时间:2019-10-24 16:38:54

标签: mongodb docker docker-compose

我开始为应用程序构建POC,它在mongodb中生成了许多有用的数据,这些数据托管在 localhost 上。我使用mongoshell和MongoDb Compass连接到该数据。

最近,我将Monolith应用程序拆分为一组微服务,并将docker引入其中。还在 docker-compose 中添加了mongo作为依赖项。所有的微服务和mongo容器都能够启动和运行逻辑。

但是,由于托管的mongodb容器缺少localhost集合,因此应用程序未找到任何对旧数据的引用。它的行为就像一个新的数据库。我没有对ipBinding进行任何更改

应用程序中的mongodb连接文件指向mongodb容器(以前是mongodb://localhost:27017/${dbName})。

docker-compose:

version: '3'
services:
  mongo:
    image: 'mongo'
    ports:
       - "27017:27017"

  some-api:
    build: ./some-api
    ports:
      - 8005:8105

Mongodb连接文件:

        const url = `mongodb://mongo:27017/${dbName}`;

        const client = await MongoClient.connect(url, { useNewUrlParser: true });

所以我需要3个问题的帮助:

  1. mongo容器如何使用本地主机数据或指向该数据?
  2. 当容器关闭并仍然在localhost mongo服务器上看到该数据时,如何保存从docker容器生成的数据?
  3. 由于mongo容器在Ip上运行,一旦容器启动并运行,我可以使用该ip通过Mongo Compass连接它吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

默认情况下,mongo容器不使用您的本地主机数据(容器化的值是所有内容都是单独的),但是您可以使用docker volumes将其链接到数据。您必须知道本地mongo文件在哪里,以及它们在容器的操作系统中的预期位置,并且可能需要在本地和容器中使用相同的存储引擎。

您的docker-compose看起来像这样:

version: '3'
services:
  mongo:
    image: 'mongo'
    volumes:
      - "/local/path/to/mongo/files/:/container/path/to/mongo/files/"
    ports:
      - "27017:27017"

  some-api:
    build: ./some-api
    ports:
      - 8005:8105

答案 1 :(得分:0)

所有容器都是与主机服务器隔离的世界,因此它们无法访问主机中的任何数据。

您可以使用链接的卷(https://docs.docker.com/compose/compose-file/#volumes)绕过此操作,您可能还需要查看mongo图像文档(https://hub.docker.com/_/mongo。PS .:转到“存储数据的位置”部分)

创建卷后,可以将其指向旧数据,但请注意,您需要使用相同版本的mongo,以免损坏数据。