Как восстановить контейнеры Docker после удаления Docker

Как восстановить контейнеры Docker после удаления Docker

Я удалил docker с помощью sudo snap remove docker. На самом деле я не хотел его удалять, просто проверял, установил ли я его с помощью snap(надо было использовать snap listзадним числом), надеясь, что он предложит мне что [Y/n]-то вроде aptэтого. Но он просто удалил docker. Отлично. Его можно было быстро переустановить снова.

Но где мои контейнеры?! Все образы и контейнеры (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-compose up, что вывело два новых контейнера
  • побежал snap restore 1восстанавливать автоматический снимок

На этом этапе я смог найти восстановленные файлы контейнеров, но docker ps -aвсе еще не показывал сами контейнеры. Вкратце, вот что я сделал, чтобы вернуть полные контейнеры:

  • удалил все видимые контейнеры и изображения после второй установки, так как они мне не нужны
  • снова удалил докер sudo 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>использовать полученное изображение для запуска его как нового контейнера. После того, как я увидел, что с ним все в порядке, я избавился от сломанного. Все вернулось к норме!

Кстати, считается хорошей практикой использовать тома для сохранения данных в контейнерах. Изображения также могут бытьсохраненов архив.

Связанный контент