如何从已删除的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/...

这给我带来了两个问题:

  1. 如果我不知道目录的卷UUID, find数据最佳方法是什么?
    • ls /var/lib/docker/volumes/给我一百这样的f77c92... dirs f77c92...
    • 使用find . -name "*postgres*" find . -name "*postgres*"我仍然得到像这样的数十个结果… 10e0dc / _data / postgresql.conf,没有明确的方法来确定正确的。
  2. 一旦我在目录中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相同的数据容器,我会找回我的数据。