البرمجة

حل مشكلة bind: address already in use

عندما تظهر رسالة “bind: address already in use” أثناء تشغيل مشروع Docker الخاص بك، يعني ذلك أن العنوان والمنفذ الذي تحاول ربطهما بتطبيقك (0.0.0.0:3000 في حالتك) يتم استخدامهما بالفعل من قبل تطبيق آخر. في حالتك، تظهر أنه يوجد تطبيق يستمع على المنفذ 3000.

لحل هذه المشكلة، يمكنك اتباع الخطوات التالية:

  1. تحديد التطبيق الذي يستخدم المنفذ 3000: استخدم الأمر sudo lsof -i :3000 لمعرفة العمليات التي تستخدم المنفذ 3000. ستظهر لك نتائج تشير إلى تطبيق يستخدم المنفذ.

  2. إيقاف التطبيق الذي يستخدم المنفذ: استخدم أمر kill حيث هو رقم معرف العملية التي تظهر في نتائج الأمر السابق. هذا سيوقف التطبيق ويفسح المجال لاستخدام المنفذ من قبل Docker.

  3. تشغيل Docker مرة أخرى: بعد إيقاف التطبيق السابق، حاول تشغيل docker-compose up مرة أخرى، ويجب أن يعمل بدون مشاكل.

من الجدير بالذكر أنه من الممكن أن يتكرر هذا الخطأ في المستقبل إذا تم تشغيل التطبيق الذي يستخدم المنفذ 3000 مرة أخرى.

المزيد من المعلومات

إذا كنت تستخدم Linux أو macOS، يمكنك استخدام الأمر التالي لمعرفة التطبيق الذي يستخدم المنفذ 3000:

bash
sudo lsof -i :3000

ستحصل على نتيجة تشبه هذه:

sql
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 1234 user 20u IPv6 0x123456789abcdef 0t0 TCP *:3000 (LISTEN)

في هذا المثال، يُظهر الناتج أن تطبيق Node.js يعمل برقم معرف العملية (PID) 1234 ويستخدم المنفذ 3000.

  1. إيقاف التطبيق الذي يستخدم المنفذ 3000: يمكنك إيقاف التطبيق المحدد باستخدام الأمر kill -9 PID، حيث يجب استبدال PID برقم معرف العملية الذي تم العثور عليه في الخطوة السابقة. على سبيل المثال:
bash
kill -9 1234

بعد ذلك، قم بتشغيل Docker مرة أخرى باستخدام docker-compose up، ويجب أن تعمل بدون مشاكل.

زر الذهاب إلى الأعلى