Chr*_*isW 5 database postgresql recovery docker
比方说,我删除了一个只有这里有数据的 PostgreSQL docker 容器:
$ docker inspect postgres1
...
"Source": "/var/lib/docker/volumes/4948af..../_data"
"Destination": "/var/lib/postgresql/data"
$ docker rm postgres1
Run Code Online (Sandbox Code Playgroud)
如果没有其他容器引用该卷--volumes-from,即使文件仍在磁盘上的某个位置,我也无法再重新连接到该卷:/var/lib/docker/volumes/...
这给我带来了两个问题:
ls /var/lib/docker/volumes/向我展示了一百个这样的目录f77c92...。find . -name "*postgres*"我仍然得到几十个这样的结果...10e0dc/_data/postgresql.conf,没有明确的方法来识别正确的结果。/var/lib/docker/volumes/4948af.../_data我每天都有一个完整的系统 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}
Run Code Online (Sandbox Code Playgroud)
(这里${grepos}是你注册或者保存数据容器的卷的路径的文件)
如果已经为该数据容器保存了路径,该脚本将删除空数据容器文件夹,并将旧文件夹移动到新文件夹(并更新新路径)
sudo rm -Rf "${grpath}"
sudo mv "${fgrpath}" "${grpath}"
Run Code Online (Sandbox Code Playgroud)
这将有助于回答你的问题 2,并完全避免你的问题 1。
这样,我可以 rm 任何容器(包括数据容器,-v当然没有选项),并且我知道下次重新创建相同的数据容器时,我会找回我的数据。
| 归档时间: |
|
| 查看次数: |
5547 次 |
| 最近记录: |