如何从已删除的Docker容器中恢复数据? 如何重新连接到数据?
比方说,我删除了一个PostgreSQL docker容器,它的数据只在这里:
$ docker inspect postgres1 ... "Source": "/var/lib/docker/volumes/4948af..../_data" "Destination": "/var/lib/postgresql/data" $ docker rm postgres1
如果没有引用卷的其他容器,即使文件仍位于/var/lib/docker/volumes/...
某个位置,我也无法使用--volumes-from
重新连接到此卷/var/lib/docker/volumes/...
这给我带来了两个问题:
- 如果我不知道目录的卷UUID, find数据的最佳方法是什么?
- 做
ls /var/lib/docker/volumes/
给我一百这样的f77c92...
dirsf77c92...
- 使用
find . -name "*postgres*"
find . -name "*postgres*"
我仍然得到像这样的数十个结果… 10e0dc / _data / postgresql.conf,没有明确的方法来确定正确的。
- 做
- 一旦我在目录中find正确的数据,如何将新创build的postgres容器重新连接到
/var/lib/docker/volumes/4948af.../_data
这些数据
我有一个每日完整的系统rsync备份。 这怎么能帮助恢复(还没有恢复整个系统)呢?
这就是为什么在创build数据容器时,我总是将其path注册到一个文件中。 (请参阅我的脚本updateDataContainerPath
)
用法(仅在创build数据容器后使用):
docker inspect ${gitolite_repos_cont} > /dev/null 2>&1 || docker create --name="${gitolite_repos_cont}" gitolite.repos /bin/true # source the script, to make the updatePath() function available . ../updateDataContainerPath # save the path in a file updatePath ${gitolite_repos_cont} "$HOME/b2d/gitolite" ${grepos}
(这里${grepos}
是注册或保存数据容器的卷的path的文件)
如果已经为该数据容器保存了path,该脚本将移除空的数据容器文件夹,并将旧数据文件夹移动到新数据文件夹 (并更新新path)
sudo rm -Rf "${grpath}" sudo mv "${fgrpath}" "${grpath}"
这将有助于回答你的问题2,并完全避免你的问题1。
这样,我可以rm任何容器(包括数据容器,当然没有-v
选项),我知道下一次我重新创build相同的数据容器,我会找回我的数据。