运维开发网

database – 如何从已删除的Docker容器中恢复数据?如何将其重新连接到数据?

运维开发网 https://www.qedev.com 2020-05-27 17:52 出处:网络 作者:运维开发网整理
比方说,我删除了一个只有这里有数据的PostgreSQL docker容器: $docker inspect postgres1 ... "Source": "/var/lib/docker/volumes/4948af..../_data" "Destination": "/var/lib/postgresql/data" $docker rm postgres1 如果没有其他容器引用该卷,我
比方说,我删除了一个只有这里有数据的PostgreSQL Docker容器

$docker inspect postgres1
...
"Source": "/var/lib/docker/volumes/4948af..../_data"
"Destination": "/var/lib/postgresql/data"

$docker rm postgres1

如果没有其他容器引用该卷,我无法再使用–volumes – 重新连接到此卷,即使文件仍在磁盘上的某个位置:/ var / lib / docker / volumes / …

这给我带来了两个问题:

>如果我不知道目录的卷UUID,找到数据的最佳方法是什么?

>做ls / var / lib / docker / volumes /给我一百个像这样的f77c92 ……

>使用find. -name“* postgres *”我仍然得到这样的数十个结果… 10e0dc / _data / postgresql.conf,没有明确的方法来识别正确的结果.

>一旦我在目录中找到了正确的数据,如何在/var/lib/docker/volumes/4948af…/_data中将新创建的postgres容器重新连接到此数据

我有一个每日完整系统rsync备份.这怎么可能有助于恢复(缺少恢复整个系统)?

这就是为什么在创建数据容器时,我总是在文件中注册它的路径. (见我的脚本 updateDataContainerPath)

用法(在创建数据容器后使用):

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}是您注册或保存数据容器卷路径的文件)

如果已经为该数据容器保存了路径,则该脚本将为remove the empty data container folder, and move the old one to the new one(并更新新路径)

sudo rm -Rf "${grpath}"
sudo mv "${fgrpath}" "${grpath}"

这有助于回答你的问题2,完全避免你的问题1.

这样,我可以运行任何容器(包括数据容器,当然没有-v选项),我知道下次重新创建相同的数据容器时,我会找回我的数据.

0

精彩评论

暂无评论...
验证码 换一张
取 消