Как настроить прокси в Docker (контейнеры, Compose и сборка)
Обновлено:
При запуске мультиконтейнерных скраперов, воркеров автоматизации или узлов 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 ₫
- От 5 IP35 000 ₫
- От 10 IP25 000 ₫
- От 20 IP25 000 ₫
- От 50 IP25 000 ₫
- От 100 IP25 000 ₫
- От 200 IP25 000 ₫
- От 500 IP25 000 ₫
- От 1000 IP22 000 ₫
- От 2000 IP20 000 ₫
- 1 IP40 000 ₫
- От 5 IP35 000 ₫
- От 10 IP25 000 ₫
- От 20 IP25 000 ₫
- От 50 IP25 000 ₫
- От 100 IP25 000 ₫
- От 200 IP25 000 ₫
- От 500 IP25 000 ₫
- От 1000 IP22 000 ₫
- От 2000 IP20 000 ₫
Понимание трех уровней конфигурации прокси в Docker
Docker разделяет трафик во время выполнения контейнера, трафик сборки образов и запросы демона к реестрам:
| Уровень 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. Демон 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), чтобы их подхватывали все утилиты 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
Сконвертируйте строку VinaProxy
ip:port:user:passс помощью нашего Конвертера форматов прокси. - 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) через внешний прокси. Добавьте 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