当前位置: 首页 > 面试题库 >

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

高正初
2023-03-14
问题内容

假设我删除了一个PostgreSQL Docker容器,该容器仅在此处具有其数据:

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

$ docker rm postgres1

如果没有其他容器引用该卷,则--volumes- from即使文件仍位于以下位置的磁盘上,也无法再重新连接到该卷:/var/lib/docker/volumes/...

这给我带来了两个问题:

  1. 如果我不知道目录的卷UUID, 找到数据最佳方法 是什么?
    • 这样做ls /var/lib/docker/volumes/给我带来了一百个这样的东西f77c92...
    • 使用find . -name "*postgres*"我仍然会得到很多类似这样的结果… 10e0dc / _data / postgresql.conf,没有明确的方法来识别正确的结果。
  2. 在目录中找到正确的数据后,如何将新创建的postgres容器 重新连接 到该数据中/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}

(这${grepos}是您在其中注册或保存数据容器卷路径的文件)

如果该脚本 已经
为该数据容器保存了路径,则该脚本将删除空的数据容器文件夹,并将旧的文件夹移至新的文件夹(并更新新路径)。

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

这将有助于回答问题2,并完全避免问题1。

这样,我可以管理任何容器(包括数据容器,-v当然没有选项),而且我知道下次重新创建该数据容器时,我会找回我的数据。



 类似资料:
  • 我正在处理dockerize我的本地服务器,在那里有数据库,应用程序服务器和所有额外的配置来部署我的应用程序。目前,我已经创建了3个docker容器,运行像Tomcat或WildFly这样的应用程序服务器,并公开了部署的应用程序的端口,这些端口Java并从/读写数据。到我本地的数据库。在每个应用程序的文件中,我已经通过在我的实际配置中配置了访问权限,没有docker也可以。 我想将容器上的应用程序

  • 问题内容: 如果我有一个数据卷容器,并且我停止并删除了该容器(没有-v标志将删除该卷),是否仍然可以使用 孤立 卷启动一个新的数据卷容器?还是数据丢失了? 问题答案: 如果删除带但不带标志的容器,则主机上目录中的数据仍然可用。 要在新的Docker容器中使用孤立的卷,您可以从主机上挂载该目录,也可以将新的空卷附加到您的Docker容器中,然后同步数据。

  • 我无法将作为docker容器运行的应用程序连接到mongoDB。我知道新版本docker compose不推荐使用“链接”,所以我尝试使用自定义网络。我的码头工人。yml: 我的应用程序的Dockerfile: 当我运行时,我在应用程序中得到以下错误消息: 在第一次连接时连接到服务器[127.0.0.1:27017]失败[MongoNetworkError:连接ECONNREFUSED127.0.

  • 我正在码头程序窗口工具包上运行 mariadb 实例。我使用风筝在 mariaDB 容器上进行了一个可取的更改。现在,它重新创建了一个实例,丢失了我所有的数据库。有没有办法从中恢复过来? 检查是否存在悬空卷,并且数量很少 docker音量ls -f悬空=真

  • 问题内容: 我有一张桌子,上面有一些ID +标题。我想使title列唯一,但是它已经有60万条记录,其中有些是重复的(有时是几十次)。 如何删除除一个以外的所有重复项,以便之后可以向标题栏添加一个唯一键? 问题答案: 此命令添加唯一键,并删除所有会产生错误的行(由于唯一键)。这将删除重复项。 编辑:请注意,对于某些版本的MySQL ,此命令可能不适用于InnoDB表。解决方法请参阅此帖子。(感谢“

  • 我正在使用PostgreSQL创建一个简单的Spring Boot应用程序。我使用“docker-comush up”创建了2个图像和容器,我还使用Flyway将我的数据库表迁移到容器中。 问题是如何移动数据,或者如何在Docker容器应用程序上访问本地计算机上的数据库数据? 我在Docker容器上运行我的应用程序,并使用获取HTTP方法,但没有数据。我得到一个空的JSON,而如果我不使用Dock