无法启动带有Nvidia Docker的崩溃容器中的数据恢复方法

72次阅读
没有评论

问题描述

遇到了一个问题:他有一个安装了Ubuntu的Docker容器,在原本的系统中使用Nvidia Docker运行。但现在他将这个硬盘连接到了另一台计算机上。在新的组装系统中,他尝试使用以下命令来启动容器:

sudo docker start container

但是他得到了一个错误,错误信息是:Unable to create /etc/nvidiactl。看起来容器需要Nvidia GPU才能运行,而他并没有这个GPU。所以他想知道,在无法启动容器的情况下,如何获取容器中的数据。

解决方案

请注意以下操作可能因版本差异而有所不同,操作前最好做好备份。

方案1:查找容器中的数据

  1. 首先,使用以下命令列出所有的容器,以获取容器的ID:
    bash
    docker container ls -a
  2. 在上述命令的输出中,第二列是镜像名称,记录下容器的镜像ID。

  3. 接下来,使用以下命令获取镜像的只读层(layers)以及相应的目录,以便在其中搜索文件:
    bash
    docker image inspect <image_id> | jq '.[0].GraphDriver.Data.LowerDir' -r | tr ":" "\n"

    如果要查找容器内的文件,使用LowerDir。如果文件是容器内部写入的,替换LowerUpper

  4. 如果你在Mac上操作,注意/var/lib/docker实际上位于虚拟机内部,因此在进入上述命令中描述的目录之前,你需要进入虚拟机。可以使用以下命令(需要安装nsenter工具):
    bash
    docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

以上是通过命令行方式来获取容器中的数据。你可以在相应的目录中使用常见的命令行工具(如find等)来搜索文件,可以按照日期、文件大小、文件名等进行过滤。

方案2:查找Docker管理的数据

如果Docker安装完好,你也可以直接在主机中查找Docker管理的数据。

Docker管理的所有数据都在/var/lib/docker目录下。你可以在这个目录中找到镜像和容器的文件系统层。这些“层次化”的文件系统层在如果没有被删除的话,都会在这个目录下。你可以使用常规的命令行工具(如find等)在这个目录中搜索文件,通过日期、文件大小、文件名等进行过滤。

这些方法应该可以帮助你在无法启动容器的情况下,找到并获取容器中的数据。

请注意,根据不同的情况和系统环境,可能需要适当地调整这些步骤以适应你的情况。

以上是关于从崩溃的Nvidia Docker容器中恢复数据的解决方案。希望这些方法对你有帮助!

正文完