Docker non funziona su Ubuntu 16.04?

Il mio Docker è rotto quando ho provato ad aggiornare Docker Manager tramite l’interfaccia web. So che la mia installazione Docker è danneggiata perché ho seguito la raccomandazione di Sam e ho ottenuto questo:

$ 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

Ho poi trovato questa issue su GitHub che sembra corrispondere a ciò che sto riscontrando:

Dato che sto usando Ubuntu 16.04, sembra che questa sia la soluzione:

  1. Aggiungi un repository deb:
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. Installa runc (nota i caratteri ~, GitHub li ha rovinati nel post originale di @vietthang207):
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. L’installazione di runc causa la rimozione di docker-ce, quindi reinstallalo:
sudo apt-get install docker-ce

Qualcuno può confermare che sia sicuro procedere in questo modo o quali saranno le conseguenze? Sono un po’ preoccupato che ciò disinstalli Docker. Immagino che significhi che il mio sito sarà offline durante il processo (stranamente, è attualmente ancora attivo e funzionante, nonostante Docker sia rotto). Ma la mia installazione di Discourse è al sicuro o anche i miei container scompariranno?

Modifica: ecco fino a dove ho osato arrivare:

$ sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
[sudo] password per christoph:
Reading package lists... Done
Building dependency tree
Reading state information... Done
I seguenti pacchetti sono stati installati automaticamente e non sono più necessari:
  aufs-tools cgroupfs-mount docker-ce-cli libltdl7
Usa 'sudo apt autoremove' per rimuoverli.
I seguenti pacchetti verranno RIMOSSI:
  containerd.io docker-ce
I seguenti NUOVI pacchetti verranno installati:
  runc
0 aggiornati, 1 nuovi installati, 2 da rimuovere e 21 non aggiornati.
1 non completamente installato o rimosso.
È necessario scaricare 1.890 kB di archivi.
Dopo questa operazione, 192 MB di spazio su disco saranno liberati.
Vuoi continuare? [Y/n] n
Operazione annullata.
$\n~~~~

Hai riavviato? Ho avuto problemi con Docker se ho eseguito un aggiornamento senza riavviare.

Sì. Sembra spaventoso. So di avere siti su 16.04 e so di non aver fatto nulla con runc.

Se sei preoccupato per i tempi di inattività e sei su Digital Ocean, potresti semplicemente:

  1. avviare un nuovo droplet con 18.04 ed eseguire un’installazione pulita.
  2. ottenere un IP flottante, puntarlo al vecchio server e puntare lì anche il DNS.
  3. impostare il vecchio forum in sola lettura
  4. eseguire un backup
  5. ripristinare sul nuovo server
  6. reindirizzare l’IP flottante al nuovo server.

Non avrai tempi di inattività, solo il tempo di sola lettura necessario per il backup e il ripristino. Puoi provare un paio di volte prima di impostare la modalità sola lettura. Potresti anche usare rsync per sincronizzare i file caricati invece di includerli nel backup, così dovresti eseguire il backup e il ripristino solo del database.

Probabilmente vorrai anche trasferire i tuoi certificati Let’s Encrypt esistenti, altrimenti, credo, dovrai ricostruirli per ottenerli.

Ci stavo pensando, ma ho deciso di non farlo, dato che, sebbene la mia installazione Docker sembri rotta, il forum funziona ancora. Riavviare il server potrebbe quindi rompere anche il forum. Quali sono le probabilità? Dovrei provare a riavviare?

Grazie per la spiegazione su come minimizzare i tempi di inattività. Ma no, non sono su DO. Comunque, i tempi di inattività non sono affatto un problema, purché sappia che non dureranno per molte ore o giorni.

Se hai aggiornato Docker, è ancora installato e questo problema è apparso dopo l’aggiornamento, allora sono abbastanza sicuro che un riavvio risolverà il problema. Nota: Il consiglio gratuito vale quanto paghi. :wink:

Fai un backup prima di riavviare. Nel caso peggiore, con un backup e il tuo app.yml, puoi avviare un nuovo server e ricominciare da capo in meno di un’ora (a meno che tu non abbia decine di GB di dati, forse).

Il mio piano funzionerebbe probabilmente per diversi servizi di hosting.

Se sei super paranoico, potresti avviare un nuovo server da qualche parte e trasferire lì un backup, così se qualcosa andasse terribilmente storto avresti un piano di riserva.

Lo apprezzo moltissimo.

In realtà, penso che valga molto di più. Ma capisco cosa vuoi dire.

Per essere precisi:

  1. Ho provato ad aggiornare il gestore Docker tramite l’interfaccia web di Discourse, ma è fallito (ho pubblicato gli errori qui)
  2. Poi ho provato . /launcher rebuild app, ma è fallito e mi ha reindirizzato a Troubleshoot docker installation issues
  3. Mi sono poi reso conto che probabilmente avrei dovuto usare un comando diverso, dato che ho container separati per i dati e per web_only, quindi ho provato ./launcher bootstrap web_only, ma ho ricevuto lo stesso errore.
  4. Ho seguito le istruzioni di Troubleshoot docker installation issues. Il resto è nell’OP.

Immagino che proverò a riavviare questo weekend, quando avrò tempo per risolvere eventuali problemi successivi. Perché: no, anche se ho configurato tre istanze di Discourse anni fa, “avviare un nuovo server e ricominciare da capo” mi terrebbe occupato per un’intera giornata. Semplicemente puntare il mio dominio al nuovo indirizzo IP sarebbe un incubo da realizzare. O forse no, ma scoprire che non è un grosso problema richiederebbe comunque del tempo…

Bene, dato che ho dedicato centinaia di ore (molto più tempo di quanto avrei impiegato se avessi semplicemente eseguito le “installazioni artigianali” fornite dal mio predecessore), se sai configurare il DNS, le mie installazioni sono completamente automatizzate e richiedono meno di un’ora (la maggior parte del tempo è dovuta alla propagazione del DNS).