¿Docker roto en Ubuntu 16.04?

Mi instalación de Docker falló cuando intenté actualizar el gestor de Docker a través de la interfaz web. Sé que mi instalación de Docker está rota porque seguí la recomendación de Sam y obtuve esto:

$ 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

Luego encontré este problema en GitHub que parece coincidir con lo que estoy viendo:

Dado que estoy en Ubuntu 16.04, parece que esta es la solución:

  1. Agregar un repositorio deb:
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. Instalar runc (note los ~, GitHub los arruinó en la publicación original de @vietthang207):
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. La instalación de runc hace que se elimine docker-ce, por lo tanto, reinstálalo:
sudo apt-get install docker-ce

¿Podría alguien confirmar si es seguro hacer esto o cuáles serán las consecuencias? Tengo un poco de miedo de que se desinstale Docker. Supongo que eso significa que mi sitio estará caído durante el proceso (curiosamente, sigue funcionando, a pesar de que Docker está roto). Pero ¿está segura mi instalación de Discourse o también desaparecerán mis contenedores?

Edición: Esto es hasta donde me he atrevido a llegar:

$ sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
[sudo] password for 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.
$

¿Has reiniciado? He tenido problemas con Docker si he hecho una actualización y no he reiniciado.

Sí. Eso suena alarmante. Sé que tengo sitios en 16.04 y que no he hecho nada con runc.

Si te preocupa el tiempo de inactividad y estás en Digital Ocean, podrías simplemente:

  1. crear un nuevo droplet con 18.04 e instalar desde cero.
  2. obtener una IP flotante, apuntarla al servidor antiguo y configurar DNS hacia allí.
  3. poner el foro antiguo en modo solo lectura.
  4. hacer una copia de seguridad.
  5. restaurarla en el nuevo servidor.
  6. volver a apuntar la IP flotante al nuevo servidor.

No tendrás tiempo de inactividad, solo el tiempo de solo lectura necesario para hacer la copia de seguridad y la restauración. Puedes practicar un par de veces antes de activar el modo solo lectura. También podrías rsync las cargas en lugar de incluirlas en la copia de seguridad, así solo necesitarías hacer copia de seguridad y restaurar la base de datos.

Probablemente también quieras trasladar tus certificados existentes de Let’s Encrypt, aunque, creo que, si no, tendrás que reconstruirlos para obtenerlos.

Lo estaba considerando, pero decidí no hacerlo porque pensé que, aunque mi instalación de Docker parece estar rota, mi foro sigue funcionando, y reiniciar el servidor podría también romper el foro. ¿Cuáles son las probabilidades? ¿Debería intentar reiniciar?

Gracias por tu explicación para minimizar el tiempo de inactividad. Pero no, no estoy en DO. Sin embargo, el tiempo de inactividad no es un problema en absoluto, siempre que sepa que no será por muchas horas o días.

Si actualizaste Docker, sigue instalado y este problema apareció tras la actualización, entonces estoy bastante seguro de que reiniciar solucionará tu problema. Nota: El consejo gratuito vale lo que pagas por él. :wink:

Haz una copia de seguridad antes de reiniciar. En el peor de los casos, con una copia de seguridad y tu app.yml, puedes levantar un nuevo servidor y empezar de nuevo en menos de una hora (a menos que tengas decenas de GB de datos, quizás).

Mi plan probablemente funcionaría para varios servicios de alojamiento.

Si eres súper paranoico, podrías levantar un nuevo servidor en algún lugar y copiar una copia de seguridad allí, para que si algo sale terriblemente mal, tengas un plan de respaldo.

Lo aprecio mucho.

En realidad, creo que vale mucho más que eso. Pero entiendo lo que quieres decir.

Para ser preciso:

  1. Intenté actualizar el gestor de Docker a través de la interfaz web de Discourse y falló (publiqué los errores aquí)
  2. Luego intenté . /launcher rebuild app, pero falló y me redirigió a Troubleshoot docker installation issues
  3. Entonces me di cuenta de que probablemente debería usar un comando diferente, ya que tengo contenedores separados para datos y web_only, así que intenté ./launcher bootstrap web_only, pero me dio el mismo error.
  4. Seguí las instrucciones de Troubleshoot docker installation issues. El resto está en el OP.

Supongo que intentaré reiniciar este fin de semana cuando tenga tiempo para solucionar posibles problemas derivados. Porque: no, aunque he configurado tres instancias de Discourse, eso fue hace años y “levantar un nuevo servidor y empezar de cero” probablemente me mantendría ocupado durante todo un día. Solo apuntar mi dominio a la nueva dirección IP sería una pesadilla potencial para lograrlo. O tal vez no, pero luego descubrir que no es gran cosa también tomaría algo de tiempo…

Bueno, dado que he pasado cientos de horas (mucho más tiempo del que habría tardado si simplemente hubiera realizado las “instalaciones artesanales” proporcionadas por mi predecesor), si sabes configurar DNS, mis instalaciones están completamente automatizadas y tardan menos de una hora (la mayor parte del tiempo es de propagación del DNS).