如何在容器重启之间保留MongoDB数据?

Vla*_*dev 11 mongodb docker

使用docker运行MongoDB容易化非常容易.虽然每次启动一个新的mongodb容器,你都会得到一个新的空数据库.

为了在容器重启之间保持数据库内容,我该怎么办?我尝试使用-v选项将外部目录绑定到容器,但没有任何成功.

cre*_*ack 5

我尝试使用ehazlett/mongodb图像,它工作正常.

使用此图像,您可以使用DATA_DIR env变量轻松指定mongo存储其数据的位置.我相信改变你的形象也一定不是很困难.

这是我做的:

mkdir test; docker run -v `pwd`/test:/tmp/mongo -e DATA_DIR=/tmp/mongo ehazlett/mongodb

注意`pwd`在内部-v,因为服务器和客户端可能有不同的路径,所以指定绝对路径很重要.

使用此命令,我可以根据需要运行mongo,数据库将始终存储在./test我刚刚创建的目录中.


Hel*_*lob 5

当使用官方的Mongo docker镜像,即mongo:4.2.2-bionic写这个答案的版本,并使用docker-compose时,你可以使用这个docker-compose.yml文件示例实现持久化数据存储。

  • 在官方的mongo镜像中,数据默认存放在root文件夹中目录下的容器中/data/db
  • 将此文件夹映射到名为data(在本例中)的本地工作目录中的文件夹。
  • 确保端口已设置并映射,默认为27017-27019:27017-27019

我的例子docker-compose.yml

version: "3.2"

services:
    mongodb:
        image: mongo:4.2.2-bionic
        container_name: mongodb
        restart: unless-stopped
        ports:
            - 27017-27019:27017-27019
        volumes:
            - ./data:/data/db
Run Code Online (Sandbox Code Playgroud)

docker-compose up在文件所在的目录中运行,yml以运行mongodb具有持久存储的容器。如果你还没有官方镜像,它会先从 Dockerhub 拉取。


zer*_*ius 2

老帖子,但可能有人仍然需要快速简单的解决方案...我发现的最简单的方法是使用绑定到卷。按照这种方式,您可以轻松附加现有的 MongoDB 数据;即使你摧毁了容器,它仍然会存在。

  1. 创建指向您的文件夹的卷(可能包括现有的数据库)。就我而言,它是在 Windows 下完成的,但您可以在任何文件系统上完成:
    docker volume create --opt type=none --opt o=bind --opt device=d:/data/db db
Run Code Online (Sandbox Code Playgroud)
  1. 使用该卷绑定使用 MongoDB创建/运行 docker容器:
    docker run --name mongodb -d -p 27017:27017 -v db:/data/db mongo
Run Code Online (Sandbox Code Playgroud)