آموزش تنظیم پروکسی در Docker (کانتینرها، Compose و بیلدها)
Updated:
هنگام اجرای اسکریپرهای چندکانتینری، ورکرهای اتوماسیون یا نودهای DePIN روی یک سرور میزبان، ارسال متغیرهای محیطی HTTP_PROXY و HTTPS_PROXY به ازای هر کانتینر به هر سرویس اجازه میدهد تا بدون تغییر در جدول مسیریابی ماشین میزبان، از طریق آدرس IPv4 اختصاصی و ثابت خود از VinaProxy متصل شود.
ENV HTTP_PROXY=http://user:pass@ip:port HTTPS_PROXY=http://user:pass@ip:port- 1 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
- 1 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
شناخت 3 محدوده پیکربندی پروکسی در Docker
Docker ترافیک زمان اجرای کانتینر، ترافیک بیلد ایمیج و درخواستهای pull رجیستری توسط دیمن را تفکیک میکند:
| محدوده Docker | محل پیکربندی | ترافیک تحت پوشش |
|---|---|---|
| 1. زمان اجرای کانتینر | docker run -e HTTP_PROXY=... یا Compose environment: | ترافیک تولید شده توسط برنامه داخل همان کانتینر خاص |
2. بیلد ایمیج (docker build) | --build-arg HTTP_PROXY=http://user:pass@ip:port | دانلودهای پکیج منیجرها (apt، pip، npm) حین بیلد |
3. دیمن داکر (dockerd) | /etc/systemd/system/docker.service.d/http-proxy.conf | درخواستهای docker pull و docker push به رجیستریها |
بهترین روشهای Docker Compose و قوانین NO_PROXY
- هر دو متغیر با حروف بزرگ (
HTTP_PROXY،HTTPS_PROXY،NO_PROXY) و حروف کوچک (http_proxy،https_proxy،no_proxy) را مقداردهی کنید تا تمامی ابزارهای CLI لینوکس و رانتایم زبانهای برنامهنویسی آنها را شناسایی کنند - همیشه نام سرویسهای داخلی Docker Compose را مشخص کنید (مانند
NO_PROXY=localhost,127.0.0.1,redis,postgres) تا ترافیک بین کانتینرها در شبکه bridge محلی باقی بماند - هرگز رمزهای عبور پروکسی را با دستور
ENVدرونDockerfileوارد ایمیجهای عمومی نکنید؛ آنها را در زمان اجرا از طریق.envیاdocker-compose.ymlتزریق کنید
گام به گام
- 1
فرمتبندی پروکسی به صورت http://user:pass@ip:port
خط
ip:port:user:passدریافتی از VinaProxy را با استفاده از Proxy Format Converter ما تبدیل کنید. - 2
افزودن متغیرهای محیطی به docker-compose.yml
در بخش
environment:سرویس خود، متغیرهایHTTP_PROXY،HTTPS_PROXY،http_proxy،https_proxyوNO_PROXY=localhost,127.0.0.1,redis,dbرا تعریف کنید. - 3
راهاندازی یا ایجاد مجدد کانتینر
برای اعمال متغیرهای محیطی، دستور
docker compose up -dرا اجرا کنید. - 4
بررسی IP خروجی از داخل کانتینر
دستور
docker exec -it <container> curl -s https://vinaproxy.com/api/my-ipرا اجرا کنید تا مطمئن شوید ترافیک خروجی کانتینر از IP پروکسی شما عبور میکند.
پرسشهای متداول
چرا کانتینر من پس از تنظیم HTTP_PROXY نمیتواند به کانتینر Redis یا Postgres دسترسی پیدا کند؟
بدون NO_PROXY، کلاینت HTTP شما تلاش میکند تا نام سرویسهای داخلی مانند redis یا db را از طریق پروکسی خارجی باز کند. برای دور زدن پروکسی در هاستهای bridge داخلی، عبارت NO_PROXY=localhost,127.0.0.1,redis,db (و حروف کوچک no_proxy) را اضافه کنید.
آیا میتوانم روی یک VPS به 20 کانتینر، 20 پروکسی مختلف اختصاص دهم؟
بله. هر سرویس کانتینر را (یا با ارسال متغیرهای متمایز .env) با رشته http://user:pass@ip:port اختصاصی خودش تعریف کنید.
چرا باید متغیرهای پروکسی را هم با حروف بزرگ و هم با حروف کوچک تنظیم کرد؟
برخی از کتابخانههای لینوکس (مانند libcurl) ابتدا متغیرهای حروف کوچک http_proxy / https_proxy را بررسی میکنند، در حالی که ابزارهای Go و Node اغلب به دنبال متغیرهای حروف بزرگ HTTP_PROXY / HTTPS_PROXY هستند.
اختصاص IPهای اختصاصی و ثابت به هر کانتینر Docker
پروکسیهای Dedicated IPv4 و Static ISP آنی، بدون محدودیت حجم و در 7 کشور مختلف.
خرید پروکسی Docker