使用docker运行MongoDB容器非常容易。虽然每次启动一个新的mongodb容器时,都会得到一个新的空数据库。
为了在容器重启之间保持数据库内容,我该怎么办?我尝试使用-v选项将外部目录绑定到容器,但没有任何成功。
答案 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
文件示例实现持久数据存储。
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中获取。