如何备份和恢复包含 MongoDB 数据的命名 docker 卷

Jul*_*oro 2 backup mongodb docker

我有一个 mongoDB 的 docker 镜像。我想制作一个备份生产数据的脚本,并将其恢复到我的本地计算机中,这样我就可以拥有类似于生产的开发环境。

这是我的一部分docker-compose.yml

 mongo:
    image: "mongo:latest"
    container_name: "espace_client_mongo"
    volumes:
      - mongo-data:/data/db
Run Code Online (Sandbox Code Playgroud)

我想导出mongo-data卷中包含的数据。

文件指出我可以这样做:

 docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Run Code Online (Sandbox Code Playgroud)

但我无法让它发挥作用。

当我运行它时,我得到:

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
Run Code Online (Sandbox Code Playgroud)

它将把当前文件夹中的文件放入备份文件夹中。这不是我想要的。我想将docker卷的内容放在备份文件夹中。我误解了什么吗?

编辑:我想使用 mongo 工具( mongodump 和 mongorestore )备份和恢复数据

bel*_*ckn 7

/var/lib/docker/volumes/mongo-data/_data您可以在主机上的目录\xc2\xb9 中找到要备份的数据。/data/db这就是您容器内的内容。

\n\n

如果您已经将数据作为卷,则不必运行额外的 Docker 容器来备份数据。所以你只需要从sudo tar cvzf backup.tar.gz /var/lib/docker/volumes/mongo-data/_data你的主机运行。

\n\n

更新

\n\n

由于您想使用mongodump,只需按照您正在使用的 Docker 映像的官方文档进行操作即可:

\n\n
$ docker exec some-mongo sh -c \'exec mongodump -d <database_name> --archive\' > /some/path/on/your/host/all-collections.archive\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

docker-compose.yml\xc2\xb9 请注意,此卷可能有另一个名称,如果您没有定义任何其他内容,则可能以运行该文件的文件夹名称为前缀。

\n