私は で docker を削除しましたsudo snap remove docker
。実際は削除したくなかったのですが、 でインストールしたかどうかを確認しただけでしたsnap
(後から考えれば を使用すべきでした)。のsnap list
ようにプロンプトが表示されることを信頼していました。しかし、そのまま先に進み、docker が削除されました。問題ありません。再インストールするのは簡単でした。[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
。
オリジナルコンテナの復元
私がこの状態に陥った経緯を振り返ってみましょう。
sudo snap remove docker
重要なコンテナを一掃したsudo snap install docker
再度dockerをインストールするために実行しました- 実行さ
docker-compose up
れ、2つの新しいコンテナが起動しました snap restore 1
自動スナップショットを復元するために実行しました
この時点で、復元されたコンテナ ファイルを見つけることができましたが、docker ps -a
実際のコンテナはまだ表示されませんでした。要約すると、完全なコンテナを復元するために行った操作は次のとおりです。
- 2回目のインストール後、必要なくなったコンテナとイメージをすべて削除しました。
- 再度 docker を削除し
sudo snap remove docker
、自動スナップショットが再度実行されていることを確認しました。「自動スナップショット セット #2 にスナップ「docker」のデータを保存します」。 - 最初のスナップショットを再度復元しました:
snap restore 1
docker ps -a
これで、すべてのコンテナが停止状態で再び表示されます。ただし、問題が 1 つあります。コンテナの 1 つが起動せず、次のメッセージが表示されますError: response from daemon: OCI runtime create failed: container with id exists:...
。
これを回避するために私が見つけた最も簡単な方法は、docker commit <container-id>
結果のイメージを使用して新しいコンテナーとして起動することでした。問題がないことを確認した後、壊れたものを削除しました。すべて正常に戻りました。
ちなみに、コンテナ内のデータを永続化するにはボリュームを使用するのがよい方法だと考えられています。イメージも保存されたアーカイブへ。