عندما تظهر رسالة “bind: address already in use” أثناء تشغيل مشروع Docker الخاص بك، يعني ذلك أن العنوان والمنفذ الذي تحاول ربطهما بتطبيقك (0.0.0.0:3000 في حالتك) يتم استخدامهما بالفعل من قبل تطبيق آخر. في حالتك، تظهر أنه يوجد تطبيق يستمع على المنفذ 3000.
لحل هذه المشكلة، يمكنك اتباع الخطوات التالية:
-
تحديد التطبيق الذي يستخدم المنفذ 3000: استخدم الأمر
sudo lsof -i :3000
لمعرفة العمليات التي تستخدم المنفذ 3000. ستظهر لك نتائج تشير إلى تطبيق يستخدم المنفذ. -
إيقاف التطبيق الذي يستخدم المنفذ: استخدم أمر
kill
حيث
هو رقم معرف العملية التي تظهر في نتائج الأمر السابق. هذا سيوقف التطبيق ويفسح المجال لاستخدام المنفذ من قبل Docker. -
تشغيل Docker مرة أخرى: بعد إيقاف التطبيق السابق، حاول تشغيل
docker-compose up
مرة أخرى، ويجب أن يعمل بدون مشاكل.
من الجدير بالذكر أنه من الممكن أن يتكرر هذا الخطأ في المستقبل إذا تم تشغيل التطبيق الذي يستخدم المنفذ 3000 مرة أخرى.
المزيد من المعلومات
إذا كنت تستخدم Linux أو macOS، يمكنك استخدام الأمر التالي لمعرفة التطبيق الذي يستخدم المنفذ 3000:
bashsudo lsof -i :3000
ستحصل على نتيجة تشبه هذه:
sqlCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1234 user 20u IPv6 0x123456789abcdef 0t0 TCP *:3000 (LISTEN)
في هذا المثال، يُظهر الناتج أن تطبيق Node.js يعمل برقم معرف العملية (PID) 1234 ويستخدم المنفذ 3000.
- إيقاف التطبيق الذي يستخدم المنفذ 3000: يمكنك إيقاف التطبيق المحدد باستخدام الأمر
kill -9 PID
، حيث يجب استبدالPID
برقم معرف العملية الذي تم العثور عليه في الخطوة السابقة. على سبيل المثال:
bashkill -9 1234
بعد ذلك، قم بتشغيل Docker مرة أخرى باستخدام docker-compose up
، ويجب أن تعمل بدون مشاكل.