Docker сломался в Ubuntu 16.04?

Мой Docker сломался, когда я попытался обновить Docker Manager через веб-интерфейс. Я знаю, что установка Docker нарушена, потому что последовал рекомендации Сэма и получил следующее:

$ 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

Затем я нашел эту проблему на GitHub, которая, похоже, соответствует тому, что я наблюдаю:

Поскольку я использую Ubuntu 16.04, похоже, что решением является следующее:

  1. Добавьте репозиторий deb:
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. Установите runc (обратите внимание на символы ~, GitHub исказил их в оригинальном посте @vietthang207):
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. Установка runc приводит к удалению docker-ce, поэтому переустановите его:
sudo apt-get install docker-ce

Может ли кто-нибудь подтвердить, что это безопасно, или каковы будут последствия? Я немного боюсь, что это удалит Docker. Предполагаю, что это означает, что мой сайт будет недоступен во время процесса (что странно, он сейчас все еще работает, несмотря на сломанный Docker). Но моя установка Discourse в безопасности, или мои контейнеры также исчезнут?

Редактирование: Вот как далеко я осмелился зайти:

$ 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.
$

Перезагружали? У меня возникали проблемы с Docker, если я делал обновление без перезагрузки.

Да, звучит пугающе. Я знаю, что у меня есть сайты на 16.04, и я ничего не делал с runc.

Если вы беспокоитесь о простое и используете Digital Ocean, вы можете просто:

  1. Создать новый droplet с 18.04 и выполнить чистую установку.
  2. Получить плавающий IP-адрес, направить его на старый сервер, а затем указать DNS на него.
  3. Перевести старый форум в режим только для чтения.
  4. Сделать резервную копию.
  5. Восстановить её на новый сервер.
  6. Перенаправить плавающий IP-адрес на новый сервер.

Вы избежите простоя, кроме времени, необходимого для перевода в режим только для чтения, резервного копирования и восстановления. Вы можете потренироваться пару раз перед тем, как перевести форум в режим только для чтения. Также можно использовать rsync для синхронизации загруженных файлов, вместо их включения в резервную копию, тогда нужно будет делать резервное копирование и восстановление только базы данных.

Вам, вероятно, также стоит перенести существующие сертификаты Let’s Encrypt, иначе, как я понимаю, придётся их пересоздавать.

Я размышлял об этом, но решил воздержаться, так как подумал: раз моя установка Docker, судя по всему, сломана, но форум всё ещё работает, то перезагрузка сервера может тоже нарушить работу форума. Каковы шансы? Стоит ли попробовать перезагрузить?

Спасибо за объяснение, как минимизировать время простоя. Но нет, я не использую DO. Однако простой вообще не проблема, если я знаю, что он не продлится много часов или дней.

Если вы обновили Docker, он всё ещё установлен, и эта проблема возникла после обновления, то я почти уверен, что перезагрузка решит вашу проблему. Примечание: Бесплатный совет стоит того, сколько вы за него заплатили. :wink:

Сделайте резервную копию перед перезагрузкой. В худшем случае, имея резервную копию и ваш app.yml, вы сможете запустить новый сервер и начать заново менее чем за час (если только у вас нет десятков гигабайт данных, возможно).

Мой план, скорее всего, подойдёт для множества хостинг-провайдеров.

Если вы крайне параноидальны, вы можете запустить новый сервер где-нибудь ещё и перенести туда резервную копию, чтобы, если что-то пойдёт ужасно не так, у вас был запасной план.

Я очень ценю это.

На самом деле, я думаю, что он стоит гораздо больше. Но я понимаю, что вы имеете в виду.

Если быть точным:

  1. Я попытался обновить менеджер Docker через веб-интерфейс Discourse, но это не удалось (я опубликовал ошибки здесь)
  2. Затем я попытался выполнить . /launcher rebuild app, но это тоже не удалось и перенаправило меня на Troubleshoot docker installation issues
  3. Затем я понял, что, вероятно, нужно использовать другую команду, так как у меня отдельные контейнеры для данных и web_only, поэтому я попробовал ./launcher bootstrap web_only, но получил ту же ошибку.
  4. Я следовал инструкциям с Troubleshoot docker installation issues. Остальное — в исходном сообщении.

Думаю, я попробую перезагрузить систему в эти выходные, когда у меня будет время исправить возможные последующие проблемы. Потому что: нет, хотя я и настраивал три экземпляра Discourse, это было годы назад, и «развёртывание нового сервера и начало с нуля» вероятно займёт у меня целый день. Только перенаправление моего домена на новый IP-адрес может стать настоящей головной болью. Или, возможно, нет, но и выяснение того, что это не такая уж большая проблема, тоже займёт некоторое время…

Что ж, поскольку я потратил сотни часов (намного больше времени, чем если бы я просто использовал «крафтовые установки», предоставленные моим предшественником), если вы умеете настраивать DNS, мои установки полностью автоматизированы и занимают менее часа (большую часть времени занимает распространение DNS).