使用docker运行MongoDB容易化非常容易.虽然每次启动一个新的mongodb容器,你都会得到一个新的空数据库.
为了在容器重启之间保持数据库内容,我该怎么办?我尝试使用-v选项将外部目录绑定到容器,但没有任何成功.
我尝试使用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
我刚刚创建的目录中.
当使用官方的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
Run Code Online (Sandbox Code Playgroud)
docker-compose up
在文件所在的目录中运行,yml
以运行mongodb
具有持久存储的容器。如果你还没有官方镜像,它会先从 Dockerhub 拉取。
老帖子,但可能有人仍然需要快速简单的解决方案...我发现的最简单的方法是使用绑定到卷。按照这种方式,您可以轻松附加现有的 MongoDB 数据;即使你摧毁了容器,它仍然会存在。
docker volume create --opt type=none --opt o=bind --opt device=d:/data/db db
Run Code Online (Sandbox Code Playgroud)
docker run --name mongodb -d -p 27017:27017 -v db:/data/db mongo
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4725 次 |
最近记录: |