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

问题描述 投票:0回答:2

我开始为应用程序构建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连接它吗?

谢谢!

mongodb docker docker-compose
2个回答
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

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.