در یک کانتینر معمولی با شبکهٔ bridge، نشانی 127.0.0.1 به loopback خود کانتینر اشاره می‌کند. پراکسی‌ای که روی localhost لپ‌تاپ گوش می‌دهد، خودبه‌خود در همهٔ کانتینرها گوش نمی‌دهد.

این نکته تفاوت رایجی را توضیح می‌دهد: همان URL پراکسی در ترمینال میزبان کار می‌کند، اما در کانتینر با رد اتصال روبه‌رو می‌شود. این نشانی در هر محیط به نقطهٔ شبکهٔ متفاوتی اشاره دارد.

پراکسی عمومی را می‌توان مستقیم استفاده کرد

اگر نقطه‌ای که از یک سرویس یا فهرست پراکسی‌های HTTP انتخاب کرده‌اید واقعاً IP عمومی قابل دسترس است، همان نشانی را به برنامه بدهید، نه اینکه آن را به localhost تبدیل کنید:

docker run --rm \
  -e HTTP_PROXY=http://203.0.113.10:8080 \
  -e HTTPS_PROXY=http://203.0.113.10:8080 \
  your-image

نشانی نمونهٔ مستندات و ایمیج را جایگزین کنید. برنامهٔ داخل ایمیج همچنان باید از این متغیرهای محیطی پشتیبانی کند؛ Docker صرفاً به‌دلیل وجود آن‌ها تمام سوکت‌ها را به درخواست پراکسی‌شده تبدیل نمی‌کند.

اگر پراکسی روی میزبان Docker اجرا می‌شود

Docker Desktop برای دسترسی به نشانی داخلی میزبان، host.docker.internal را فراهم می‌کند. در پیکربندی پشتیبانی‌شدهٔ Engine بومی، یک نگاشت میزبان می‌تواند این نام متداول را فراهم کند:

docker run --rm \
  --add-host host.docker.internal=host-gateway \
  -e HTTP_PROXY=http://host.docker.internal:8080 \
  -e HTTPS_PROXY=http://host.docker.internal:8080 \
  your-image

این کار حل نام را تغییر می‌دهد؛ فرمان هدایت پورت نیست. در Linux بومی، سرویسی که فقط به loopback میزبان متصل است ممکن است همچنان از نشانی bridge میزبان قابل دسترس نباشد. شنونده، فایروال و مسیر کانتینر باید اتصال را مجاز کنند. اگر شنونده را تغییر می‌دهید، آن را به کلاینت‌های نیازمند دسترسی محدود کنید، به‌جای ایجاد پراکسی باز بدون احراز هویت.

از همان محیط برنامه آزمایش کنید

نتیجهٔ curl روی میزبان فقط مسیر میزبان را می‌آزماید. درخواست مربوط را از محیط کانتینر بفرستید و بررسی کنید که به نقطهٔ موردنظر می‌رسد یا نه.

«میزبان» همچنین به دستگاهی گفته می‌شود که Docker Engine را اجرا می‌کند. با Engine راه‌دور، این دستگاه لزوماً لپ‌تاپ شما نیست. بنابراین احتمال کارکرد بدون تغییرِ IP loopback کپی‌شده از برنامهٔ دسکتاپ محلی روی سازنده یا سرور راه‌دور، به‌ویژه کم است.

مشکلات دریافت ایمیج را جدا نگه دارید: دیمون پیش از آنکه برنامه بتواند از محیط بالا استفاده کند، ایمیج را دانلود می‌کند.

مقالات مرتبط