快照刪除docker後如何還原docker容器

快照刪除docker後如何還原docker容器

我用 刪除了 docker sudo snap remove docker。我實際上並不想刪除它,只是檢查我是否安裝了它(事後snap應該使用),相信它會提示我類似的操作。但它只是繼續刪除了 docker。美好的。很快又重新安裝了一次。snap list[Y/n]apt

但是,我的容器在哪裡?所有影像和容器(docker ps -a)都消失了!卸載花了很長時間,所以我想知道是否有一些備份或文件仍然保留並且容器可以恢復?不關心圖像,只關心容器。謝謝。

檢查過/var/snap/docker/common/var-lib-docker/containers,但原來的容器不在那裡。

答案1

事實證明,花費很長時間的操作確實是備份,或者用他們的術語來說,是快照。來自文件:

快照是使用 snap save 命令手動生成的,並在刪除快照時自動生成(需要 snapd 2.39+)。快照可用於備份快照的狀態、將快照還原到先前的狀態以及將全新的 snapd 安裝還原到先前儲存的狀態。

我檢查了我的snapd版本:

# snap --version
snap    2.52.1
snapd   2.52.1
series  16
ubuntu  21.04
kernel  5.11.0-40-generic

然後查看可用的快照:

# snap saved
Set  Snap    Age    Version  Rev   Size    Notes
1    docker  2h58m  20.10.8  1125  1.39GB  auto

檢查快照是否正常:

# snap check-snapshot 1
Snapshot #1 verified successfully.

最後恢復自動快照:

# snap restore 1
Restored snapshot #1.

此時docker ps -a仍然向我顯示了我在最新安裝後創建的容器,而不是我想要恢復的容器。也許如果我沒有創建新的容器,它就會起作用。但我知道至少容器文件已經恢復,因為我可以在/var/snap/docker/common/var-lib-docker/overlay2/.這總比沒有好。小心snap remove

恢復原始容器

讓我回顧一下我是如何進入這種狀態的:

  • ransudo snap remove docker消滅了重要的容器
  • 再次跑去sudo snap install docker安裝docker
  • rundocker-compose up帶來了兩個新容器
  • 運行snap restore 1恢復自動快照

此時我能夠找到恢復的容器文件,但docker ps -a仍然沒有顯示實際的容器。總之,這就是我為取回完整容器所做的事情:

  • 第二次安裝後刪除了所有可見的容器和映像,因為我不需要它們
  • 再次刪除 dockersudo snap remove docker並注意到自動快照再次發生:“將快照“docker”的資料保存在自動快照集#2中”
  • 再次恢復第一個快照:snap restore 1

現在,如果我這樣做,docker ps -a我可以再次看到所有容器處於停止狀態!但有一個問題,其中一個無法啟動,並顯示以下訊息:Error: response from daemon: OCI runtime create failed: container with id exists:...

為了解決這個問題,我發現的最簡單的方法是docker commit <container-id>使用生成的映像將其作為新容器啟動。我一看沒問題,就把壞掉的丟掉了。一切恢復正常!

順便說一句,使用卷將資料保存在容器中被認為是很好的做法。圖片也可以已儲存到存檔。

相關內容