Discourse внезапно стал недоступен

Здравствуйте!

Мой экземпляр Discourse перестал работать (с моей стороны ничего не менялось).

В файле production.log я вижу следующее сообщение:
Ошибка подключения к Redis на localhost:6379 (Errno::ENETUNREACH) подписка не удалась,

Что я уже пробовал:

  • Перезагрузка сервера
  • Обновление Docker + перезагрузка сервера + пересборка приложения

Я довольно новичок в Docker и Discourse, поэтому не понимаю, что ещё можно сделать :frowning:

ОС хоста: CentOS 7
Прокси: Apache
Docker: последняя версия

На хосте установлены fail2ban и firewalld.
В логах firewalld я вижу странные строки:

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1' failed: iptables: Нет такой цепи/цели/соответствия.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION-STAGE-2' failed: iptables: Нет такой цепи/цели/соответствия.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-2' failed: iptables: Нет такой цепи/цели/соответствия.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION' failed: iptables: Нет такой цепи/цели/соответствия.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION' failed: iptables: Нет такой цепи/цели/соответствия.

2020-07-23 14:00:53 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Неверное правило (существует ли совпадающее правило в этой цепи?).

2020-07-23 14:00:53 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Неверное правило (существует ли совпадающее правило в этой цепи?).

Буду признателен за любую помощь или совет :slight_smile:
Заранее спасибо!

Похоже, проблема связана с iptables и Docker. Стоит поискать информацию по этим темам. Это не проблема Discourse.

Я бы предположил, что проблема с Redis скорее связана с Discourse, чем с iptables или Docker, верно?

Это говорит мне о том, что сетевая подсистема Docker повреждена, поэтому даже если Discourse и Redis работают корректно, Discourse не может получить доступ к Redis из-за проблем с сетью и/или Docker.

Мое предположение: эти проблемы возникли после установки firewalld, и именно она нарушила работу вашей установки.

Спасибо, Джей.

Я остановил демон firewalld, перезапустил Docker и проблемный контейнер, но ошибка осталась прежней (в production.log):

Ошибка подключения к Redis на localhost:6379 (Errno::ENETUNREACH) подписка не удалась, повторная попытка через 1 секунду.

Я подключился к контейнеру Docker:

docker exec --privileged -it <container id> bash

Вижу, что Redis запущен:

redis 45 0.2 0.1 45936 4352 ? Sl 05:29 0:02 /usr/bin/redis-server *:6379

Есть какие-то идеи?

Я добился некоторого прогресса. Моя конфигурация использует Apache 2.4 в качестве прокси. В конфигурацию я добавил следующее:

RemoteIPHeader X-Forwarded-For

чтобы отслеживать исходный IP-адрес.
После перезапуска httpd я смог получить доступ к Discourse (с предупреждением о истечении срока действия SSL-сертификата). Я также исправил эту проблему, и теперь всё работает отлично, но только при отключённом firewalld.

Я нашёл множество сообщений о проблемах между Docker и firewalld в CentOS 7. Поэтому я вернусь к использованию iptables.

Что касается сообщения об ошибке Redis, то после выполнения вышеуказанных шагов оно появляется только при остановке Docker. При перезапуске оно не отображается, поэтому, думаю, это нормально.

Спасибо!

После прочтения этого я остановил Docker на нашем сервере Centos

systemctl stop docker

затем запустил его

systemctl start docker

проблема решена.

Спасибо @pfaffman