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 list
em retrospectiva), confiando que ele me avisaria do [Y/n]
mesmo apt
jeito. 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 snapd
versã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 -a
ainda 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 docker
que destruiu contêineres importantes - corri
sudo snap install docker
para instalar o docker novamente - correu
docker-compose up
que trouxe dois novos contêineres - correu
snap restore 1
para restaurar o instantâneo automático
Neste ponto, consegui encontrar os arquivos do contêiner restaurado, mas docker ps -a
ainda 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 docker
e 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 -a
posso 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.