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

时间:2013-08-27 18:59:41

标签: mongodb docker

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

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

2 个答案:

答案 0 :(得分: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目录中。

答案 1 :(得分:3)

当使用正式的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

docker-compose up文件所在的目录中运行yml,以运行具有持久性存储的mongodb容器。如果您还没有官方映像,它将首先从Dockerhub中获取。