我的mongoDB有一个docker映像。我想制作一个脚本来备份生产数据,并将其还原到本地计算机上,以便可以拥有一个与生产类似的开发环境。
这是我的docker-compose.yml
mongo:
image: "mongo:latest"
container_name: "espace_client_mongo"
volumes:
- mongo-data:/data/db
我要导出mongo-data
卷中包含的数据。
文档表明我可以使用:
docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
但我无法使其正常工作。
运行它,我得到:
ec2-user@espace-client-prod prod]$ docker run --rm --volumes-from espace_client_mongo -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar ./backup
tar: ./backup/backup.tar: file is the archive; not dumped
./backup/
./backup/Caddyfile
./backup/docker-compose.yml
[ec2-user@espace-client-prod prod]$ ls
backup.tar Caddyfile docker-compose.yml
它将把当前文件夹中的文件放入备份文件夹。这不是我想要的。我想将docker卷的内容放在备份文件夹中。我误会了吗?
编辑:我想使用mongo工具(mongodump和mongorestore)备份和还原数据
答案 0 :(得分:1)
您可以在主机上的目录/var/lib/docker/volumes/mongo-data/_data
¹中找到要备份的数据。这就是容器中/data/db
的内容。
如果已经将数据作为卷,则不必运行其他Docker容器来备份数据。因此,您只需要在主机上运行sudo tar cvzf backup.tar.gz /var/lib/docker/volumes/mongo-data/_data
。
更新
由于您要使用mongodump
,因此请遵循the official documentation来显示所使用的Docker映像:
$ docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
¹注意,如果未定义其他任何内容,则该卷可能有另一个名称,可能以运行docker-compose.yml
的文件夹名称为前缀。
答案 1 :(得分:1)
我使用此命令从容器中备份数据,注意目录“ / data / db”。
docker run --rm \
--volumes-from espace_client_mongo \
-v $(pwd):/backup \
ubuntu bash -c "cd /data/db && tar cvf /backup/backup.tar ."