OneBox не работает для доменных имен на одном IP-адресе хоста

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

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

Недавно моя установка Discourse (https://forum.domainname.com/) находилась на том же сервере, что и мой сайт (https://www.domainname.com/), с Nginx в качестве обратного прокси.
Я перенёс установку Discourse на новый сервер с той же конфигурацией (Nginx в качестве обратного прокси). Всё работало нормально, пока я не перенёс свой сайт на новый сервер.

Некоторые люди сообщили, что функция Onebox больше не работает. В ходе расследования я понял, что она не работает только для моего доменного имени.
Поэтому я протестировал вход в контейнер Docker и обнаружил, что не могу подключиться к своему сайту изнутри контейнера. Все остальные внешние IP-адреса работают, но я не могу подключиться ни к внешнему IP-адресу моего сервера, ни к localhost.
Честно говоря, я не понимаю, почему это происходит, конфигурация точно такая же, как на старом сервере.

С наилучшими пожеланиями

Эта проблема существует уже очень давно. Именно это было главной причиной, по которой я перенёс Discourse на отдельный VPS.

Но было бы здорово, если бы её удалось решить, ведь тогда я смогу экономить около 40 евро в месяц.

Честно говоря, у меня раньше не было такой проблемы — я всегда размещал свой сайт и установку Discourse на одном сервере.

Мой предположение — проблема с DNS.

Есть ли в вашем файле /etc/hosts запись вашего имени хоста с адресом 127.0.0.1?

Если да, удалите локальный IP-адрес хоста, так как контейнер не может подключиться к нему. (Вы также можете добавить внешний IP-адрес хоста в файл hosts контейнера.)

Это не проблема DNS, так как контейнер Docker находит правильный IP-адрес доменного имени. При выполнении curl из контейнера Discourse запрос завершается тайм-аутом, так как не удается подключиться к порту 443.

Отлично, мне удалось заставить это работать.

Так что для всех, кому это интересно (то есть: @Jagster):

Если вы используете фаервол в Linux (я использую arno-iptables-firewall):

  • перечислите свои сетевые устройства с помощью команды “ifconfig”; по умолчанию Docker создаёт сетевое устройство с именем docker0
  • откройте конфигурацию фаервола и добавьте docker0 в секцию TRUSTED_IF
  • перезапустите фаервол, а затем перезапустите Docker