المطورون

لا تستطيع حاوية الوصول إلى localhost على Mac

لكل حاوية مكدس شبكة خاص بها. داخل الحاوية، يشير localhost إلى الحاوية نفسها، وليس Mac.

ينطبق على: Docker Desktop وOrbStack على إصدارات macOS الحالية.تاريخ التحقق: 29 أكتوبر 2026

الأعراض

  • يتلقى تطبيق في حاوية رسالة «connection refused» على localhost:5432 أو منفذ مماثل.
  • يعمل عنوان URL نفسه في Safari أو Terminal على Mac.
  • يتعذر الوصول إلى خادم نموذج أو API على Mac من حاوية تطوير.

الأسباب المحتملة

  • يشير localhost إلى الحاوية. تبحث الحاوية عن الخدمة في مكدس الشبكة الخاص بها، حيث لا يستمع أي شيء.
  • يتغير عنوان المضيف. تقول وثائق Docker إن عنوان IP للمضيف يتغير، وتوفر اسمًا خاصًا للمضيف بدلًا منه.
  • جدار حماية على Mac. قد يحظر جدار حماية macOS أو تطبيق جدار حماية آخر الاتصالات الواردة إلى الخدمة.

كيفية التحقق

  1. تأكد من أن الخدمة تعمل على Mac. استبدل 8000 بمنفذك.

    curl http://localhost:8000
  2. اعرف العنوان الذي تستمع عليه خدمة Mac.

    lsof -nP -iTCP:8000 -sTCP:LISTEN

    المخرجات تعني *:8000 جميع العناوين. وتعني 127.0.0.1:8000 عنوان الاسترجاع فقط.

  3. اختبر اسم المضيف من داخل الحاوية، إذا كانت الصورة تتضمن wget.

    docker exec my-container wget -qO- http://host.docker.internal:8000

كيفية الإصلاح

  1. في الحاوية، استخدم host.docker.internal بدلًا من localhost. يدعم Docker Desktop وOrbStack هذا الاسم.

  2. اضبط العنوان في إعدادات التطبيق، مثلًا في متغير بيئة.

    docker run -e API_URL=http://host.docker.internal:8000 my-image
  3. مع OrbStack، يمكنك استخدام شبكة المضيف بدلًا من ذلك. عندئذ تكون خدمات Mac على localhost في الحاوية.

    docker run --net host my-image
  4. إذا استمر فشل الاتصال، فتحقق من إعدادات جدار حماية macOS. انظر جدار حماية macOS يحظر الاتصالات الواردة.

باستخدام Kilobat

  1. تعمل فحوص Kilobat على Mac، وليس داخل الحاوية. أضف --context container للحصول على أمر تشغّله في الحاوية.

    kilobat why http://localhost:8000 --context container
  2. إذا كانت خدمة مستضافة تتصل بـ Mac، فاستخدم --context provider. عندئذ يوضح Kilobat أن localhost خاص وخارج نطاق وصوله.

    kilobat why http://localhost:8000 --context provider

الأسئلة

هل يعمل host.docker.internal على Linux أيضًا؟

تغطي هذه الصفحة Mac. في Docker Desktop لـ Mac وOrbStack، يُحل الاسم إلى المضيف.

لماذا يصل Safari إلى الخدمة بينما لا تستطيع الحاوية ذلك؟

يعمل Safari على Mac، لذا يشير localhost إلى Mac. للحاوية localhost خاص بها.

المصادر

تم التحقق في 29 أكتوبر 2026.