Не удалось разрешить хост: github.com

Привет,

./launcher rebuild app

fatal: unable to access ‘GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub’: Could not resolve host: github.com

но

root@discourse:/var/discourse# host github.com
github.com has address 140.82.121.3
github.com mail is handled by 1 aspmx.l.google.com.
github.com mail is handled by 10 alt4.aspmx.l.google.com.
github.com mail is handled by 10 alt3.aspmx.l.google.com.
github.com mail is handled by 5 alt1.aspmx.l.google.com.
github.com mail is handled by 5 alt2.aspmx.l.google.com.

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

Спасибо


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
' failed with return #<Process::Status: pid 144 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" ]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128

Это внутри контейнера, так что проблема может быть в сети Docker, или это могло быть временным сбоем?

Использует ли контейнер по умолчанию файл /etc/resolv.conf хоста? Если есть локальный resolver, например nameserver 127.0.0.1, я предполагаю, что он может быть недоступен изнутри контейнера. Unbound настроен на разрешение запросов из всех зарезервированных диапазонов IP-адресов, включая 172.16.0.0/12, используемый контейнерами Docker, так что это не проблема.

Однако, поскольку мы сталкиваемся с той же проблемой при пересборке и действительно настроили свой собственный Unbound в промежутке, даже после удаления строки, чтобы /etc/resolv.conf снова содержал только nameserver 1.1.1.1, как и раньше, пересборка всё равно завершается ошибкой в той же точке. Возможно, это где-то закэшировано? :thinking:

С хоста github.com разрешается без проблем.

РЕДАКТИРОВАНИЕ: Нет, /etc/resolv.conf сейчас не является проблемой. Я добавил некоторый вывод отладки:

I, [2025-09-25T17:32:38.092043 #1]  INFO -- : > cd /var/www/discourse && cat /etc/resolv.conf
I, [2025-09-25T17:32:38.093195 #1]  INFO -- : # Сгенерировано Docker Engine.
# Этот файл можно редактировать; Docker Engine не будет вносить дальнейшие изменения после его
# модификации.

nameserver 1.1.1.1

# На основе файла хоста: '/etc/resolv.conf' (устаревший)
# Переопределения: []

I, [2025-09-25T17:32:38.093221 #1]  INFO -- : > cd /var/www/discourse && getent hosts github.com
I, [2025-09-25T17:32:58.111177 #1]  INFO -- :
I, [2025-09-25T17:32:58.111456 #1]  INFO -- : Завершение асинхронных процессов

РЕДАКТИРОВАНИЕ: apt update также зависает навсегда, тестовый curl также не работает, оба добавлены в шаблоны Discourse для проверки наличия сетевого подключения. nameserver 9.9.9.9 тоже не работает, похоже, что у контейнера нет сетевого доступа, но непонятно почему.

… РЕДАКТИРОВАНИЕ 2: Хорошо, в нашем случае Fail2Ban заблокировал IP-адрес контейнера из-за некорректного адреса электронной почты пользователя, на который он пытался отправить письма, что вызвало срабатывание фильтра Postfix в Fail2Ban :smile:.

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

РЕДАКТИРОВАНИЕ 3: В конфигурации jail в Fail2Ban:

ignoreip = 127.0.0.1/8 172.16.0.0/12

Чтобы избежать блокировки loopback-адресов и IP-адресов Docker.