Як налаштувати проксі в 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 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
Огляд 3 рівнів конфігурації проксі в Docker
Docker розділяє трафік середовища виконання контейнерів, трафік збірки образів та запити демона до реєстрів:
| Рівень Docker | Де налаштовується | Що маршрутизує |
|---|---|---|
| 1. Середовище виконання контейнера (Container Runtime) | docker run -e HTTP_PROXY=... або Compose environment: | Трафік, створений застосунком усередині цього конкретного контейнера |
2. Збірка образів (docker build) | --build-arg HTTP_PROXY=http://user:pass@ip:port | Завантаження менеджерів пакетів (apt, pip, npm) під час збірки |
3. Демон Docker (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-інструменти Linux та середовища виконання мов програмування - Завжди вказуйте внутрішні імена сервісів 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 вашого проксі.
Часті запитання
Чому мій контейнер не може підключитися до контейнера Redis або Postgres після встановлення HTTP_PROXY?
Без NO_PROXY ваш HTTP-клієнт намагається отримати доступ до внутрішніх імен сервісів (таких як redis або db) через зовнішній проксі. Додайте NO_PROXY=localhost,127.0.0.1,redis,db (і в нижньому регістрі no_proxy), щоб скеровувати трафік внутрішніх хостів мережі bridge в обхід проксі.
Чи можу я призначити 20 різних проксі для 20 контейнерів на одному VPS?
Так. Визначте для кожного сервісу контейнера (або передайте окремі змінні у .env) власний рядок http://user:pass@ip:port.
Чому потрібно встановлювати змінні проксі як у верхньому, так і в нижньому регістрі?
Деякі бібліотеки Linux (наприклад, libcurl) спочатку перевіряють нижній регістр http_proxy / https_proxy, тоді як інструменти Go та Node часто перевіряють верхній регістр HTTP_PROXY / HTTPS_PROXY.
Призначте виділені статичні IP для кожного Docker-контейнера
Миттєві виділені IPv4 та статичні ISP-проксі без обмеження трафіку у 7 країнах.
Купити проксі для Docker