После обновления Docker не может связываться с внешним миром

Сегодня утром я узнал из сообщений, что мой сервер Discourse «не работает».

Я смог подключиться к серверу по SSH без проблем, заметил, что необходимо применить некоторые обновления безопасности, применил их с помощью apt full-upgrade и перезагрузил сервер командой reboot.

Сервер восстановился немного не сразу, но когда это произошло, я проверил, запущен ли контейнер Docker с Discourse. Странно, но всё работало нормально.

Попытался остановить и снова запустить его командами ./launcher app stop и ./launcher app start. Это не помогло.

Попробовал выполнить ./launcher app rebuild и получил следующую ошибку.

fatal: unable to access 'https://github.com/discourse/pups.git/': Could not resolve host: github.com
d1412324832190f43a2d51b5f10c53d6fa671056f91d0be2178d17a5ba1ab692

Понимаю, что информации не так много, но я в тупике. Буду очень благодарен за любые предложения.

Спасибо

Это указывает на какую-то ошибку сети. Возможно, Docker не может получить доступ к внешнему миру?

Есть ли идеи, как это проверить?

Попробуйте:

docker run --rm -i debian ping -c 1 github.com

Вы должны получить, например:

○ → docker run --rm -i debian ping -c 1 github.com
PING github.com (140.82.113.3) 56(84) байт данных.
64 байта от lb-140-82-113-3-iad.github.com (140.82.113.3): icmp_seq=1 ttl=49 time=44.8 мс

--- статистика ping для github.com ---
передано пакетов: 1, получено: 1, потеря пакетов: 0%, время: 0 мс
rtt min/avg/max/mdev = 44.797/44.797/44.797/0.000 мс

Да… это выдаёт
ping: github.com: Временная ошибка при разрешении имени

Не знаю, что изменилось. Не имею представления, как это исправить.

Это работает извне Docker?

Я могу получить доступ к GitHub из-за пределов Docker.

ping github.com
PING github.com (192.30.255.113) 56(84) байт данных.
64 байта от lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=1 ttl=52 время=23.3 мс
64 байта от lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=2 ttl=52 время=23.3 мс

Попробуйте:

  • перезапустить Docker
  • выполнить docker run --rm -i debian cat /etc/resolv.conf, чтобы посмотреть, что там находится

Похоже, это Google

# Динамический файл resolv.conf(5) для резолвера glibc(3), сгенерированный resolvconf(8)
#     НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ ВРУЧНУЮ — ВАШИ ИЗМЕНЕНИЯ БУДУТ ЗАПИСАНЫ
# 127.0.0.53 — это заглушка резолвера systemd-resolved.
# выполните "systemd-resolve --status", чтобы увидеть детали о фактических серверах имен.

nameserver 8.8.8.8
nameserver 8.8.4.4

@supermathie Не уверен, связано ли это с этим, но в ./launcher logs app я вижу:

[Tue 01 Dec 2020 07:07:13 PM UTC] См. https://curl.haxx.se/libcurl/c/libcurl-errors.html для кода ошибки: 6
[Tue 01 Dec 2020 07:07:13 PM UTC] Не удалось инициализировать API.
[Tue 01 Dec 2020 07:07:13 PM UTC] Домены не изменены.
[Tue 01 Dec 2020 07:07:13 PM UTC] Пропуск, следующее время обновления: Sat Dec 26 00:31:17 UTC 2020
[Tue 01 Dec 2020 07:07:13 PM UTC] Добавьте '--force', чтобы принудительно выполнить обновление.
[Tue 01 Dec 2020 07:07:13 PM UTC] Установка ключа в: /shared/ssl/community.acescentral.com.key
[Tue 01 Dec 2020 07:07:13 PM UTC] Установка полной цепочки в: /shared/ssl/community.acescentral.com.cer
[Tue 01 Dec 2020 07:07:13 PM UTC] Выполнение команды перезагрузки: sv reload nginx
fail: nginx: runsv не запущен
[Tue 01 Dec 2020 07:07:13 PM UTC] Ошибка перезагрузки для:
[Tue 01 Dec 2020 07:07:33 PM UTC] См. https://curl.haxx.se/libcurl/c/libcurl-errors.html для кода ошибки: 6
[Tue 01 Dec 2020 07:07:34 PM UTC] Не удалось инициализировать API.
[Tue 01 Dec 2020 07:07:34 PM UTC] Домены не изменены.
[Tue 01 Dec 2020 07:07:34 PM UTC] Пропуск, следующее время обновления: Sat Dec 26 00:31:20 UTC 2020
[Tue 01 Dec 2020 07:07:34 PM UTC] Добавьте '--force', чтобы принудительно выполнить обновление.
[Tue 01 Dec 2020 07:07:34 PM UTC] Установка ключа в: /shared/ssl/community.acescentral.com_ecc.key
[Tue 01 Dec 2020 07:07:34 PM UTC] Установка полной цепочки в: /shared/ssl/community.acescentral.com_ecc.cer
[Tue 01 Dec 2020 07:07:34 PM UTC] Выполнение команды перезагрузки: sv reload nginx
fail: nginx: runsv не запущен
[Tue 01 Dec 2020 07:07:34 PM UTC] Ошибка перезагрузки для:
Запущен runsvdir, PID: 458
chgrp: недопустимая группа: 'syslog'
ok: run: redis: (pid 473) 0s
ok: run: postgres: (pid 470) 0s
rsyslogd: imklog: не удалось открыть лог ядра (/proc/kmsg): Операция не разрешена.
rsyslogd: активация модуля imklog не удалась [v8.1901.0 см. https://www.rsyslog.com/e/2145 ]
PID supervisor: 471, PID unicorn: 497

Какая у вас версия Docker и как вы её установили? И какая версия Ubuntu у вас установлена?

Client:
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.13.8
 Git commit:        afacb8b7f0
 Built:             Wed Oct 14 19:43:43 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       afacb8b7f0
  Built:            Wed Oct 14 16:41:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.3-0ubuntu2.1
  GitCommit:
 runc:
  Version:          spec: 1.0.1-dev
  GitCommit:
 docker-init:
  Version:          0.18.0
  GitCommit:

Честно говоря, не помню… он здесь уже очень давно. Сегодня утром я обновил Ubuntu, как описано выше

Ubuntu 20.04.1 LTS

После перезапуска Docker команда ping работает?

Нет, та же ошибка.

ping: github.com: Временный сбой при разрешении имени

Ещё один случайный момент…

Мой сервер Discourse находится по адресу community.mydomain.com.
Сервер WordPress работает на mydomain.com.
Вчера я настроил сервер Rocket.Chat на chat.mydomain.com.

Я зарегистрировал chat.mydomain.com в Let’s Encrypt.
Серверы WordPress и Rocket.Chat работают нормально.

Не уверен, что это как-то связано с данной проблемой, но просто хотел убедиться, что ничего не упускаю.

Я, возможно, попробую полностью удалить Docker и установить его заново; сложно точно предположить, что здесь происходит и почему Docker перестал работать.

Прежде чем что-либо делать, убедитесь, что у вас есть резервная копия данных (либо резервная копия Discourse, либо хотя бы базы данных PostgreSQL и файлов загрузок). Если есть возможность, создайте образ виртуальной машины.

Полностью удалил Docker и установил заново.

Проблема сохраняется.

Это раздражает.

Может ли ваш сервер связаться с Google DNS, то есть выполнить ping 8.8.8.8?

Проблем с сервером нет

ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) байт данных.
64 байта от 8.8.8.8: icmp_seq=1 ttl=119 время=2.72 мс

--- статистика ping для 8.8.8.8 ---
1 пакет передан, 1 получен, 0% потерь пакетов, время 0 мс
rtt min/avg/max/mdev = 2.720/2.720/2.720/0.000 мс

В Docker не повезло

docker run --rm -i debian ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) байт данных.

--- статистика ping для 8.8.8.8 ---
1 пакет передан, 0 получено, 100% потерь пакетов, время 0 мс

Честно говоря, на данном этапе, по-моему, лучший вариант — переустановить систему и перенести ваши данные.

У вас сломанная система по таинственным причинам, а процесс установки довольно быстрый. Вероятно, это лучшее использование вашего времени.