تعذر حل المضيف: github.com

أهلاً،

./launcher rebuild app

fatal: unable to access ‘GitHub - discourse/discourse: A platform for community discussion. Free, open, simple.’: 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

إنه داخل الكونتينر، لذلك قد تكون هناك مشكلة في شبكة دوكر، أو قد تكون مشكلة مؤقتة؟

هل يستخدم الحاوية /etc/resolv.conf الخاص بالمضيف افتراضيًا؟ إذا كان هناك محلل محلي مثل 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 -- : # Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 1.1.1.1

# Based on host file: '/etc/resolv.conf' (legacy)
# Overrides: []

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 -- : Terminating async processes

تعديل: apt update أيضًا يعلق إلى الأبد، واختبار curl يفشل أيضًا، وكلاهما تم إضافته كاختبار إلى قوالب Discourse للتحقق مما إذا كانت الشبكة متصلة بالإنترنت. nameserver 9.9.9.9 لا يعمل أيضًا، لذا يبدو أن الحاوية ليس لديها وصول إلى الشبكة، ولكن لا فكرة عن السبب.

… تعديل 2: حسنًا، في حالتنا، قام Fail2Ban بحظر عنوان IP الخاص بالحاوية بسبب عنوان بريد إلكتروني غير صالح لحساب مستخدم كان يحاول إرسال رسائل بريد إلكتروني إليه، مما أدى إلى تشغيل مرشح Postfix الخاص بـ Fail2Ban :smile:.

لذلك، يمكن أن يكون التحقق من Fail2Ban خطوة تصحيح واحدة إذا لم تكن للحاوية شبكة.

تعديل 3: في تكوين سجن Fail2Ban:

ignoreip = 127.0.0.1/8 172.16.0.0/12

لتجنب حظر عناوين IP الخاصة بالحلقة المحلية وعناوين IP الخاصة بـ Docker.