1.5 · المراقبة والتصحيح : السجلات وexec وinspect

المستوى 1 · الحاويات : الصور، المجلدات، الشبكات

1.5المراقبة والتصحيح : السجلات وexec وinspect

الهدف: تشخيص حاوية لا تُقلع في أقل من 5 دقائق.
الوقت المقدّر: 12 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • السجلات : سماع المريض : يقرأ docker logs bdd اليومية، و-f يتبعها مباشرة، و--tail 50 لا يأخذ إلا آخرها — فحاوية في حلقة تروي سببها دائما.
  • exec : الدخول للتحقق : يفتح docker exec -it web sh صدفة في الحي (ملف، وping، وenv) — للتشخيص، وليس لتثبيت دائم أبدا.
  • ps ← logs ← exec/inspect : يعطي docker ps -a الحالة ورمز الخروج، ويكشف inspect كل شيء (المتغيرات، والربطات، والشبكات) — دون تخمين.

حالة مستمرة — إدير يشرّح وبا صامتا

يوم العرض، لم يعد وب إدير يجيب. وبدلا من إعادة إنشاء كل شيء عميانا، طبّق المنهج : أظهر docker ps -a حالة Exited (1)، واتهم docker logs web منفذا مستعملا، وأكد docker inspect web تعارض النشر. حرّر المنفذ، وأعاد التشغيل — فعادت الصفحة. خمس دقائق، وصفر تخمين : واحتفظ مسؤوله خاصة بأن إدير سمّى السبب قبل التصحيح.

خاتمة حالة 1.1-1.4 — يُغلق إدير المستوى : التشخيص قبل التصحيح.

1. السجلات : سماع المريض

يقرأ docker logs bdd اليومية، و-f يتبعها مباشرة، و--tail 50 لا يأخذ إلا آخرها. فحاوية تعيد الإقلاع في حلقة تروي سببها دائما في سجلاتها (كلمة مرور ناقصة، ومنفذ مشغول، ومجلد في مسار خطأ).

وعلى الخدمات الثرثارة، نحدّ بـ --tail : نقرأ الآخر، لا كيلومترات. وإذا كانت السجلات فارغة، فالتطبيق يسجّل ربما في مكان آخر (ملف داخلي : ادخلوا مع exec) أو يموت قبل الكتابة (inspect + الضبط).

2. exec : الدخول للتحقق

يفتح docker exec -it web sh صدفة في الحي : التحقق من ملف، واختبار اتصال (ping bdd)، وقراءة متغير (env). ولضربة واحدة دون صدفة : docker exec web ls /usr/share/nginx/html. ولا نثبّت شيئا دائما هكذا : فهو تشخيص.

والتعديل يدويا في الحاوية ضائع في run التالي : فـ exec تعاين، ولا تصلح دائما.

3. inspect وps : الحالة المدنية

يعطي docker ps -a الحالة (Up وExited وRestarting) ورمز الخروج. ويكشف docker inspect كل شيء : الأمر، والمتغيرات، والربطات، والشبكات، والمنافذ. والمنهج : ps ← logs ← exec/inspect، بهذا الترتيب، دون تخمين.

وندوّن السبب الحقيقي، لا العرض : « منفذ مستعمل » بدلا من « لا يعمل ».

خطأ شائع في الفهم: « أمام عطل، نعيد الإنشاء بسرعة عميانا، ويعمل exec حتى على حاوية متوقفة ». لا. فإعادة الإنشاء دون قراءة تعيد الخطأ نفسه (فالسبب — كلمة المرور، والمنفذ، والمسار — لم يتغير)، ويتطلب exec حاوية حية (« container not running » وإلا). نقرأ أولا (ps ← logs)، ونثبت بعدها (inspect، وexec إن كانت حية).
التشخيص دون تخمين الحالة، والسجلات، والفحص : ترتيب ثابت ps (الحالة) Up؟Exited؟ Restarting؟logs (السبب) --tail و-f: اليومية تتّهمexec/inspect (الإثبات) منالداخل + الضبط الحقيقي
الحالة، والسجلات، والفحص : ترتيب ثابت
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) الحالة : يقرأ إدير docker ps -a — فوبه في Exited (1)، لا في Up : فانطلق الأثر. 2) السبب : اتهم docker logs web منفذا مستعملا — فاليومية تتكلم. 3) الإثبات : أكد docker inspect web تعارض النشر، فحرّر المنفذ وأعاد التشغيل. الدرس : 90 % من الأعطال تُحل دون إعادة إنشاء عمياء — فالحالة توجّه، والسجلات تتّهم، والفحص يؤكد.

المعيد الإنشاء في حلقة (لا تفعلوا هذا أبدا)

« حاويتي تتحطم؟ أعيد إنشاءها. تتحطم مجددا؟ أعيد إنشاءها أسرع. سبع مرات. »
الحكم : فالسبب (كلمة مرور ناقصة، مقروءة من أول سطر في السجلات) نجا من عمليات الإنشاء السبع — ولا يرحل إلا بقراءته.

العبرة : إعادة الإنشاء دون قراءة هي الخسارة سبع مرات أمام سطر السجل نفسه.

🔎 مثال ملموس — 🔎 مثال ملموس — وب لا يجيب

تشريح وب إدير الصامت، خطوة بخطوة.

docker ps -a          # Exited (1)؟ Restarting؟
docker logs web       # مثال : منفذ مستعمل
docker inspect web    # التحقق من المنافذ والشبكات
docker exec -it web sh  # التفتيش من الداخل

القراءة : الحالة توجّه، والسجلات تتّهم، والفحص يؤكد.

الدرس : 90 % من الأعطال تُحل دون إعادة إنشاء عمياء.

مفردات القسم

السجلات
اليومية التي يلتقطها المحرك (Daemon) ؛ تُقرأ مع -f (مباشرة) و--tail (الآخر).

مثال بسيط: يكشف docker logs web --tail 30 المنفذ المشغول عند إدير.

ما ليس كذلك: ملف قابل للتعديل يدويا.

رد فعل: اقرأوا دائما قبل إعادة الإنشاء.

exec
تنفيذ أمر في حاوية حية (صدفة -it أو ضربة واحدة).

مثال بسيط: docker exec -it web sh لتفتيش الوب الحي.

ما ليس كذلك: إنشاء حاوية جديدة (run).

رد فعل: exec = حية ؛ والمتوقفة = inspect أو run --rm.

inspect
الملف الكامل JSON لحاوية أو صورة أو شبكة (المتغيرات، والربطات، والمنافذ).

مثال بسيط: يؤكد docker inspect web تعارض المنافذ.

ما ليس كذلك: تخمين حول الضبط.

رد فعل: الضبط الحقيقي، لا ما نعتقد.

رمز الخروج
فـ 0 (OK) أو غير الصفر (خطأ) الذي يتركه المسار، والمرئي في ps -a.

مثال بسيط: يوجّه Exited (1) إدير نحو السجلات.

ما ليس كذلك: رقم منفذ.

رد فعل: غير الصفر = قراءة السجلات فورا.

في التطبيق — عمليا — تشريح موجّه

  1. شغّلوا عمدا حاوية سيئة الضبط (-e خطأ).
  2. سجّلوا حالتها الدقيقة مع ps -a.
  3. اقرؤوا آخر 30 سطرا من سجلاتها وسمّوا السبب.
  4. أكدوا مع inspect (المتغيرات، والربطات)، ثم صحّحوا.
تشخّصون بدلا من التلمّس : الحالة، والسبب، والإثبات.

نص جاهز — تشريح في 5 دقائق (30 ثانية)

« حاويتي في Exited (1) : أقرأ آخر ثلاثين سطرا من سجلاتها، وأسمّي السبب — منفذ مستعمل. أؤكد مع inspect : المنافذ والشبكات. أصحّح السبب، لا العرض، وأدوّنه. »

يُقال مع تسلسل ps وlogs --tail ثم inspect ؛ مع عرض السبب المسمّى قبل التصحيح.

قالب جاهز للنسخ — قائمة التشريح

docker ps -a                 # 1. الحالة : Up؟ Exited (رمز)؟ Restarting؟
docker logs NOM --tail 50   # 2. السبب : قراءة الآخر، والتسمية (منفذ، -e، مجلد)
docker inspect NOM          # 3. الإثبات : المتغيرات، والربطات، والشبكات، والمنافذ
docker exec -it NOM sh      # 4. إن كانت حية : التفتيش (ملف، ping، env)
# 5. تصحيح السبب، والتدوين (لا العرض). وليست إعادة إنشاء عمياء أبدا.

وب إدير الصامت

كما أعلاه : Exited (1) ← logs ← منفذ مشغول ← inspect ← تحرير ← إعادة تشغيل. خمس دقائق، وصفر تخمين.

قاعدة في Restarting

حلقة إعادة إقلاع : فتحمل السجلات السبب (غالبا -e ناقصة أو مسار مجلد خطأ) — فنقرأ قبل الفعل.

سجلات فارغة

تطبيق يسجّل في ملف داخلي : ادخلوا مع exec لقراءته، أو inspect + الضبط إن ماتت الحاوية قبل الكتابة.

ضربة واحدة دون صدفة

docker exec web ls /usr/share/nginx/html : التحقق من محتوى دون فتح صدفة — سريع ودون خطر.

✓ ممارسات جيدة

  • اقرؤوا السجلات دائما قبل إعادة الإنشاء.
  • حدّدوا مع --tail على الخدمات الثرثارة.
  • دوّنوا السبب الحقيقي (لا العرض).

✗ أخطاء شائعة

  • إعادة الإنشاء في حلقة دون قراءة (الخطأ نفسه).
  • التعديل يدويا في الحاوية (ضائع في run التالي).
  • الخلط بين exec (حية) وrun (جديدة).

النقاط الأساسية

  • تعطي ps الحالة، وlogs السبب.
  • تدخل exec، ويكشف inspect كل شيء.
  • ترتيب ps ← logs ← exec/inspect لا يتغير.
  • نصحّح السبب، لا العرض.

تحدي 48 ساعة — طبّق غدا

خرّبوا عمدا حاوية (-e خطأ)، وسجّلوا حالتها ps -a، واقرؤوا 30 سطرا من السجلات، وسمّوا السبب، وأكدوا بـ inspect — ثم صحّحوا ودوّنوا.

قائمة الخروج من القسم
  • أسجّل الحالة الدقيقة (ps -a) قبل كل فرضية.
  • أقرأ السجلات لتسمية السبب.
  • أؤكد بـ inspect/exec وأصحّح السبب.
تقييم ذاتي 1-5 : هل أقرأ السجلات قبل إعادة الإنشاء؟هل أدوّن السبب الحقيقي، لا العرض؟

أسئلة شائعة

السجلات فارغة، ماذا نفعل؟

فإما أن التطبيق يسجّل في مكان آخر (ملف داخلي : ادخلوا مع exec)، وإما أن الحاوية تموت قبل الكتابة (inspect + الضبط). تحققوا أيضا من مشغّل السجلات.

يرفض exec : « container not running »؟

طبيعي : فيتطلب exec حاوية حية. أقلعوها، أو استعملوا run --rm لفحص مرمي للصورة.

تحقّق من فهمك

حاوية في « Restarting ». أول منعكس؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك