Docker 卷备份错误:Tar:MYCONTAINER_VOLUME:无法统计:没有这样的文件或目录

Sta*_*cat 2 docker

我正在尝试按照 docker 文档中的说明备份我的卷:https : //docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes

我正在运行带有卷路径的命令:

docker run --rm --volumes-from MYCONTAINER -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/docker/volumes/MYCONTAINER_VOLUME
Run Code Online (Sandbox Code Playgroud)

...并且还尝试仅使用我的卷名

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

但无论我收到什么错误,如: tar: MYCONTAINER_VOLUME: Cannot stat: No such file or directory

该卷创建并链接到容器,docker-compose并使用该卷的本地驱动程序。

当我运行时,docker volume ls我得到:

DRIVER              VOLUME NAME

local               MYCONTAINER_VOLUME

Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?

Sta*_*cat 6

我想出了问题是什么 -

命令的最后一部分应该是挂载在 CONTAINER 中的卷的路径,而不是 HOST 上的卷的路径。

所以基本上,这个命令的公式应该是:

docker run --rm --volumes-from MYCONTAINER -v $(pwd):/backup ubuntu tar cvf /backup/MY_BACKUP.tar /PATH/INSIDE/CONTAINER/TO/VOLUME/data
Run Code Online (Sandbox Code Playgroud)

... 这将MY_BACKUP.tar在 HOST 的当前目录中创建。

另外,如果在我的情况下它类似于 postgres,请确保在归档卷之前停止容器。

然后,如果您正在使用,要恢复该卷docker-compose(因为我也遇到了这个问题,因为该文档并非特定于以这种方式创建的预先存在的容器/卷)

1)停止容器

2)确保MY_BACKUP.tar在HOST的项目根目录下

3)运行

docker run --rm --volumes-from MYCONTAINER -v $(pwd):/backup ubuntu bash -c "cd / && tar xvf /backup/MY_BACKUP.tar
Run Code Online (Sandbox Code Playgroud)

4)重启容器

希望这对某人有所帮助,我当然愿意接受任何想法来简化它。