Docker容器备份示例中backup.tar存于何处?执行后文件未找到的困惑
解决Docker卷备份后找不到backup.tar的问题
我来帮你理清这个问题——先拆解下你用的这条备份命令到底在做什么,然后就能找到文件去哪了。
命令逻辑拆解
你执行的这条命令:
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
每个参数的核心作用:
--rm: 命令执行完成后自动删除这个临时容器,所以备份完成后它就彻底消失了,文件肯定不在这个容器里--volumes-from dbstore: 把原容器dbstore的所有卷挂载到临时容器中,这也是为什么你能看到备份内容的输出——临时容器确实能访问到要备份的卷-v $(pwd):/backup: 把你在主机上执行命令时的当前目录,挂载到临时容器的/backup目录下。这是关键:临时容器里的/backup和主机当前目录是实时双向同步的tar cvf /backup/backup.tar /dbdata: 在临时容器里把/dbdata(原卷内容)打包到/backup/backup.tar——因为/backup映射的是主机目录,所以这个tar文件应该出现在你执行命令的主机目录里,既不在原容器dbstore里,也不会留在被删除的临时容器里
为什么你找不到文件?可能的原因
1. $(pwd)的路径不生效或找错了目录
- 如果你是Windows系统,用CMD或PowerShell时,
$(pwd)是Linux风格的变量,Windows不识别:- CMD里要换成
%cd% - PowerShell里要换成
${PWD}
- CMD里要换成
- 先在主机终端执行
pwd(Linux/macOS)或cd(Windows CMD)/Get-Location(PowerShell),确认你当前的工作目录,然后去这个目录里找backup.tar
2. 权限问题
- 可能你的主机用户没有写入当前目录的权限,导致tar命令看起来输出了内容,但实际上无法生成文件
- 解决方法:Linux/macOS可以在命令前加
sudo;Windows可以右键以管理员身份打开终端后再执行命令
3. Docker Desktop的WSL2路径映射问题
- 如果你用的是WSL2后端的Docker Desktop,在WSL里执行命令时,
$(pwd)是WSL内的路径,而你可能在Windows资源管理器里找错了地方 - 你可以在Windows资源管理器里输入
\\wsl$\,找到对应的WSL发行版,然后进入你执行命令的目录查找
验证步骤
- 先在主机终端执行以下命令,确认当前路径:
- Linux/macOS:
echo $(pwd) - Windows CMD:
echo %cd% - Windows PowerShell:
echo ${PWD}
- Linux/macOS:
- 手动导航到这个路径,查看是否有
backup.tar - 如果还是找不到,把命令里的
$(pwd)换成绝对路径试试,比如:- Linux/macOS:
-v /home/yourname/backups:/backup - Windows:
-v C:/Users/yourname/backups:/backup(注意用正斜杠)
- Linux/macOS:
内容的提问来源于stack exchange,提问作者secondbreakfast
相关产品推荐
相关产品推荐

