【发布时间】:2019-10-24 16:38:54
【问题描述】:
我开始为一个应用程序构建一个 POC,它在托管在 localhost 上的 mongodb 中生成了许多有用的数据。我使用 mongoshell 和 MongoDb Compass 连接到该数据。
最近,我将单体应用拆分为一组微服务,并将 docker 引入其中。还在 docker-compose 中添加了 mongo 作为依赖项。所有微服务和 mongo 容器都能够启动和运行逻辑。
但是,由于托管的 mongodb 容器缺少 localhost 集合,因此应用程序没有找到对旧数据的任何引用。它的行为就像一个新的数据库。我没有参考ipBinding做任何改变
应用中的mongodb连接文件指向mongodb容器(之前是mongodb://localhost:27017/${dbName})。
码头工人撰写:
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 个问题的帮助:
- mongo 容器如何使用本地主机数据或指向该数据?
- 当容器关闭时,我应该如何保存从 docker 容器生成的数据,并且仍然可以在 localhost mongo 服务器上看到这些数据?
- 由于 mongo 容器在一个 IP 上运行,一旦容器启动并运行,我可以使用该 ip 使用 Mongo Compass 连接它吗?
谢谢!
【问题讨论】:
-
在使用 MongoDB 和 docker 时,您需要考虑数据持久性。在某些情况下,您可能不关心在删除容器时是否删除了数据。在其他情况下,您可能希望删除容器并启动一个新容器,但保留旧数据。如果是这种情况,则需要持久存储。
-
您一般不能使用 Docker 私有 IP 地址。
-
@DavidMaze 你的意思是我不能使用docker私有IP地址使用指南针登录?
-
没有。特别值得注意的是,它不适用于其他主机,也不适用于非 Linux 主机。您必须发布一个端口并使用该端口和主机的 IP 地址,或者在同一主机的 Docker 环境中使用容器间 DNS 系统。
标签: mongodb docker docker-compose