Como restaurar contêineres do docker após remoção instantânea do docker

Como restaurar contêineres do docker após remoção instantânea do docker

Eu removi o docker com sudo snap remove docker. Na verdade, eu não queria removê-lo, estava apenas verificando se o havia instalado snap(deveria ter usado snap listem retrospectiva), confiando que ele me avisaria do [Y/n]mesmo aptjeito. Mas simplesmente foi em frente e removeu o docker. Multar. Foi rápido reinstalá-lo novamente.

Mas onde estão meus containers?! Todas as imagens e contêineres (docker ps -a)desapareceram! Demorou muito para desinstalá-lo, então gostaria de saber se há algum backup ou se os arquivos ainda são mantidos e os contêineres podem ser restaurados. Não se preocupe com as imagens, apenas com os contêineres. Obrigado.

Verificado /var/snap/docker/common/var-lib-docker/containers, mas os recipientes originais não estão lá.

Responder1

Acontece que a operação que estava demorando era de fato um backup ou, na terminologia deles, um instantâneo. Dedocumentação:

Os instantâneos são gerados manualmente com o comando snap save e automaticamente quando um snap é removido (requer snapd 2.39+). Um snapshot pode ser usado para fazer backup do estado dos seus snaps, reverter snaps para um estado anterior e restaurar uma nova instalação do snapd para um estado salvo anteriormente.

Eu verifiquei minha snapdversão:

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

Então vi quais snapshots estavam disponíveis:

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

Verifiquei se o instantâneo estava OK:

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

Finalmente, restaurei o instantâneo automático:

# snap restore 1
Restored snapshot #1.

Neste ponto, docker ps -aainda me mostraram os contêineres que criei após a instalação mais recente, em vez daqueles que eu queria restaurar. Talvez se eu não tivesse criado novos containers, simplesmente funcionaria. Mas sei que pelo menos os arquivos contêineres foram restaurados, porque posso encontrá-los em /var/snap/docker/common/var-lib-docker/overlay2/. Isso é melhor do que nada. Seja cuidadoso com snap remove!

Restaurando contêineres originais

Deixe-me recapitular como cheguei a esse estado:

  • correu sudo snap remove dockerque destruiu contêineres importantes
  • corri sudo snap install dockerpara instalar o docker novamente
  • correu docker-compose upque trouxe dois novos contêineres
  • correu snap restore 1para restaurar o instantâneo automático

Neste ponto, consegui encontrar os arquivos do contêiner restaurado, mas docker ps -aainda não mostrei os contêineres reais. Em resumo, foi isso que fiz para recuperar os contêineres completos:

  • removi todos os contêineres e imagens visíveis após a segunda instalação, pois não precisava deles
  • removeu o docker novamente sudo snap remove dockere percebeu que o instantâneo automático estava ocorrendo novamente:"Salvar dados do snap" docker "no conjunto de snapshots automáticos nº 2".
  • restaurou o primeiro instantâneo novamente:snap restore 1

Agora, se eu fizer isso, docker ps -aposso ver todos os meus contêineres novamente, parados! Porém, há um problema: um deles não inicia, com a mensagem: Error: response from daemon: OCI runtime create failed: container with id exists:....

Para contornar isso, a maneira mais simples que encontrei foi docker commit <container-id>usar a imagem resultante para iniciá-la como um novo contêiner. Depois que vi que estava tudo bem, me livrei do quebrado. Tudo de volta ao normal!

A propósito, é considerada uma boa prática usar volumes para persistir dados em contêineres. As imagens também podem sersalvoupara um arquivo.

informação relacionada