Как да настроите прокси в 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+ IP адреса35 000 VND
- 10+ IP адреса25 000 VND
- 20+ IP адреса25 000 VND
- 50+ IP адреса25 000 VND
- 100+ IP адреса25 000 VND
- 200+ IP адреса25 000 VND
- 500+ IP адреса25 000 VND
- 1000+ IP адреса22 000 VND
- 2000+ IP адреса20 000 VND
- 1 IP40 000 VND
- 5+ IP адреса35 000 VND
- 10+ IP адреса25 000 VND
- 20+ IP адреса25 000 VND
- 50+ IP адреса25 000 VND
- 100+ IP адреса25 000 VND
- 200+ IP адреса25 000 VND
- 500+ IP адреса25 000 VND
- 1000+ IP адреса22 000 VND
- 2000+ IP адреса20 000 VND
Разбиране на трите обхвата за конфигуриране на прокси в Docker
Docker разделя трафика при изпълнение на контейнера, трафика при изграждане на изображението и изтеглянията от регистри чрез демон процеса:
| Обхват в Docker | Къде се конфигурира | Какво маршрутизира |
|---|---|---|
| 1. Изпълнение на контейнер (Container Runtime) | docker run -e HTTP_PROXY=... or 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 and docker push requests to registries |
Добри практики за Docker Compose и правила за NO_PROXY
- Задайте променливите както с главни (
HTTP_PROXY,HTTPS_PROXY,NO_PROXY), така и с малки букви (http_proxy,https_proxy,no_proxy), за да се разпознават от всички Linux 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 с помощта на нашия Конвертор на прокси формати. - 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 контейнер
Моментални неограничени Dedicated IPv4 и Static ISP проксита в 7 държави.
Купете Docker проксита