我开始为应用程序构建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个问题的帮助:
谢谢!
答案 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,以免损坏数据。