Docker quebrado no Ubuntu 16.04?

Minha instalação do Docker falhou quando tentei atualizar o gerenciador do Docker via web-ui. Sei que minha instalação do Docker está quebrada porque segui a recomendação do Sam e obtive isso:

$ docker run -it --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
docker: Error response from daemon: no status provided on response: unknown.
ERRO[0003] error waiting for container: context canceled

Em seguida, encontrei esta issue no GitHub que parece corresponder ao que estou vendo:

Como estou no Ubuntu 16.04, parece que esta é a solução:

  1. Adicione um repositório deb:
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. Instale o runc (note os ~, o GitHub os estragou na postagem original de @vietthang207):
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. A instalação do runc causa a remoção do docker-ce, portanto reinstale-o:
sudo apt-get install docker-ce

Alguém poderia confirmar se é seguro fazer isso ou quais serão as consequências? Estou um pouco assustado com a possibilidade de isso desinstalar o Docker. Suponho que isso signifique que meu site ficará fora do ar durante o processo (o que é estranho, pois ele continua no ar e funcionando, apesar do Docker estar quebrado). Mas minha instalação do Discourse está segura ou meus containers também desaparecerão?

Edição: É até aqui que eu me atrevi a ir:

$ sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
[sudo] senha para christoph:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  aufs-tools cgroupfs-mount docker-ce-cli libltdl7
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  containerd.io docker-ce
The following NEW packages will be installed:
  runc
0 upgraded, 1 newly installed, 2 to remove and 21 not upgraded.
1 not fully installed or removed.
Need to get 1,890 kB of archives.
After this operation, 192 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.
$

Você reiniciou? Tenho tido problemas com o Docker se fiz uma atualização e não reiniciei.

Sim. Isso soa assustador. Sei que tenho sites no 16.04 e sei que não fiz nada com runc.

Se você está preocupado com tempo de inatividade e está na Digital Ocean, talvez seja melhor:

  1. Criar um novo droplet com o 18.04 e fazer uma instalação limpa.
  2. Obter um IP flutuante, apontá-lo para o servidor antigo e atualizar o DNS para lá.
  3. Colocar o fórum antigo em modo somente leitura.
  4. Fazer o backup.
  5. Restaurar no novo servidor.
  6. Reapontar o IP flutuante para o novo servidor.

Você não terá tempo de inatividade, apenas o período de somente leitura necessário para fazer o backup e a restauração. Você pode praticar uma ou duas vezes antes de colocar o sistema em modo somente leitura. Você também pode usar rsync para sincronizar os uploads em vez de incluí-los no backup, assim precisará fazer backup e restaurar apenas o banco de dados.

Provavelmente, você também precisará transferir seus certificados existentes do Let’s Encrypt, caso contrário, acredito que terá que recriá-los.

Eu estava pensando em fazer isso, mas desisti, pois achei que, já que minha instalação do Docker aparentemente está quebrada, mas o fórum ainda funciona, reiniciar o servidor também poderia quebrar o fórum. Quais são as chances? Devo tentar reiniciar?

Obrigado pela sua explicação sobre como minimizar o tempo de inatividade. Mas não, não estou na DO. No entanto, o tempo de inatividade não é um problema, desde que eu saiba que não será por muitas horas ou dias.

Se você atualizou o Docker, ele ainda está instalado, e esse problema surgiu após a atualização, então tenho quase certeza de que reiniciar resolverá seu problema. Nota: Conselhos gratuitos valem o que você pagou por eles. :wink:

Faça um backup antes de reiniciar. No pior caso, com um backup e seu app.yml, você pode levantar um novo servidor e começar de novo em menos de uma hora (a menos que você tenha dezenas de GB de dados, talvez).

Meu plano provavelmente funcionaria para vários serviços de hospedagem.

Se você for super paranoico, pode levantar um novo servidor em algum lugar e restaurar um backup lá, para que, se algo der muito errado, você tenha um plano de contingência.

Agradeço muito.

Na verdade, acho que vale muito mais do que isso. Mas entendo o que você está dizendo.

Para ser preciso:

  1. Eu tentei atualizar o gerenciador do Docker pela interface web do Discourse e falhei (publiquei os erros aqui)
  2. Em seguida, tentei . /launcher rebuild app, mas falhou e me redirecionou para Troubleshoot docker installation issues
  3. Percebi então que provavelmente deveria usar um comando diferente, pois tenho containers separados para dados e web_only, então tentei ./launcher bootstrap web_only, mas obtive o mesmo erro.
  4. Segui as instruções de Troubleshoot docker installation issues. O restante está no OP.

Acho que vou tentar reiniciar no fim de semana, quando tiver tempo para resolver possíveis problemas subsequentes. Porque: não, embora eu tenha configurado três instâncias do Discourse anos atrás, “levantar um novo servidor e começar do zero” provavelmente me manteria ocupado por um dia inteiro. Apenas apontar meu domínio para o novo endereço IP sozinho seria um pesadelo potencial para realizar. Ou talvez não, mas descobrir que não é um grande problema também levaria algum tempo…

Bem, como já passei centenas de horas (muito mais tempo do que se eu tivesse apenas feito “instalações artesanais” fornecidas pelo meu antecessor), se você souber configurar o DNS, minhas instalações são totalmente automatizadas e levam menos de uma hora (a maior parte do tempo é a propagação do DNS).