使用 docker 运行容器化的 MongoDB 非常容易。虽然每次启动新的 mongodb 容器时,都会得到新的空数据库。
为了在容器重新启动之间保留数据库内容,我应该怎么做?我尝试使用 -v 选项将外部目录绑定到容器,但没有成功。
我尝试使用该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
我刚刚创建的目录中。
当使用官方的Mongo docker镜像,即mongo:4.2.2-bionic
写这个答案的版本,并使用docker-compose时,可以使用这个docker-compose.yml
文件示例实现持久化数据存储。
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 拉取它。