1.5المراقبة والتصحيح : السجلات وexec وinspect
الأساسي في 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، بهذا الترتيب، دون تخمين.
وندوّن السبب الحقيقي، لا العرض : « منفذ مستعمل » بدلا من « لا يعمل ».
المعيد الإنشاء في حلقة (لا تفعلوا هذا أبدا)
العبرة : إعادة الإنشاء دون قراءة هي الخسارة سبع مرات أمام سطر السجل نفسه.
🔎 مثال ملموس — 🔎 مثال ملموس — وب لا يجيب
تشريح وب إدير الصامت، خطوة بخطوة.
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) إدير نحو السجلات.
ما ليس كذلك: رقم منفذ.
رد فعل: غير الصفر = قراءة السجلات فورا.
في التطبيق — عمليا — تشريح موجّه
- شغّلوا عمدا حاوية سيئة الضبط (-e خطأ).
- سجّلوا حالتها الدقيقة مع ps -a.
- اقرؤوا آخر 30 سطرا من سجلاتها وسمّوا السبب.
- أكدوا مع 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 وأصحّح السبب.
أسئلة شائعة
السجلات فارغة، ماذا نفعل؟
فإما أن التطبيق يسجّل في مكان آخر (ملف داخلي : ادخلوا مع exec)، وإما أن الحاوية تموت قبل الكتابة (inspect + الضبط). تحققوا أيضا من مشغّل السجلات.
يرفض exec : « container not running »؟
طبيعي : فيتطلب exec حاوية حية. أقلعوها، أو استعملوا run --rm لفحص مرمي للصورة.
حاوية في « Restarting ». أول منعكس؟