如何备份和还原包含MongoDB数据的命名Docker卷

时间:2019-06-11 12:58:22

标签: mongodb docker backup

我的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)备份和还原数据

2 个答案:

答案 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 ."