在 Docker 上运行的 Mongodb 正在重新启动后擦除集合

Posted

技术标签:

【中文标题】在 Docker 上运行的 Mongodb 正在重新启动后擦除集合【英文标题】:Mongodb running on Docker is wiping the collection after restart 【发布时间】:2022-01-20 10:07:22 【问题描述】:

我必须构建一个小型应用程序,从 docker 上运行的 MongoDB 读取数据并将其用于进一步的处理。

问题是在我关闭 docker 后,数据库的本地实例也被删除了。我怎样才能阻止它?

MONGODB_URImongodb://localhost:27017,我应该在 docker 命令中添加哪些属性来避免它。我应该避免使用本地主机吗? docker-compose 让我感到困惑,所以我使用 Dockerfile。

那么,docker run 命令究竟可以通过什么来避免它呢?是其中之一吗?

Commands: docker run -d --name mongo-on-docker -p 27017:27017 mongo
          docker run -d --name sample --link mongo-on-docker web app

还要永久保存我应该使用什么数据目录?

【问题讨论】:

安装卷做/data/db。此信息可在他们的docker hub page 上找到。 您似乎并不真正了解容器和 Docker 的不同对象和关系。您应该检查 Dockerfile 和 docker-compose 之间的区别,以及卷(绑定挂载和命名卷) 【参考方案1】:

Docker 容器在退出前已经死亡。对于存储数据,您应该将命名卷、文件夹或文件挂载到容器中。 在 MongoDB 案例中尝试:

docker run --rm -ti -v mongo_data:/data/db mongo bash 

其中 mongo_data 是一个特殊的 Docker 实体,可以作为文件夹挂载到容器中。同时包含在不同的容器中。

不是新的: How to set docker mongo data volume

【讨论】:

以上是关于在 Docker 上运行的 Mongodb 正在重新启动后擦除集合的主要内容,如果未能解决你的问题,请参考以下文章

从 docker 容器连接到主机 mongodb

在 alpine linux 上执行 mongodb 二进制文件

使用 mongodb compass GUI 连接到 docker 内的 Mongodb

当 Marathon 在同一主机上运行所有 docker 应用程序时,docker 服务停止

Docker compose api无法连接到主机MongoDB数据库

Docker 运行 MongoDB 副本集..,它是如何工作的?