15

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

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

4

2 回答 2

8

我尝试使用该ehazlett/mongodb图像并且效果很好。

使用此图像,您可以使用 DATA_DIR 环境变量轻松指定 mongo 将其数据存储在何处。我相信改变你的形象也一定不是很难。

这是我所做的:

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

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

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

于 2013-08-27T19:50:12.590 回答
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

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

于 2020-02-04T13:28:02.657 回答