Аккуратная работа с прокси в Docker, WSL и виртуальных машинах

хост подключён, а `pip install` в контейнере всё равно падает по таймауту? Потому что 127.0.0.1 внутри контейнера — это не ваш компьютер.

Сначала главное

127.0.0.1 всегда означает «я сам». В контейнере это контейнер, в WSL2 — виртуальная машина WSL, в VMware — виртуальная машина. Поэтому 127.0.0.1:7898 хоста из этих сред недоступен.

Две задачи — два решения

ЗадачаКто отправляет запросКак настроить
docker pull образовДемон DockerНастройки прокси демона
pip install в контейнереПроцессы в контейнереПеременные окружения контейнера, указывающие на хост

Docker Desktop: host.docker.internal

Docker Desktop даёт контейнерам специальное имя host.docker.internal, указывающее на хост:

bash
docker run --rm -e HTTPS_PROXY=http://host.docker.internal:7898 python:3.13 pip download requests

Нативный Docker в Linux, WSL2 и ВМ: общий прокси

Запросы из этих сред приходят с другого адреса из частной сети. Ради безопасности локальный прокси CoderBoost по умолчанию принимает только подключения с той же машины. Нужно:

  1. включить в клиенте «Общий прокси» и разрешить только нужную частную сеть;
  2. создать для каждого гостя отдельные учётные данные (пароль показывается один раз);
  3. использовать в госте прокси http://пользователь:пароль@адрес-хоста:порт.

Зачем учётные данные? Если сеть открыта, подключиться могут и другие устройства из неё. Отдельные учётные данные показывают, кто пользуется прокси, и позволяют в любой момент отозвать доступ каждому по отдельности.

Три частые ошибки

  1. Прокси в ENV Dockerfile: адрес прокси, а то и пароль, останется в слоях образа. Передавайте его через --build-arg.
  2. Забытый NO_PROXY: обращения контейнера к внутренним сервисам (базам данных, другим контейнерам) тоже идут через прокси. Задайте NO_PROXY=localhost,127.0.0.1,.internal,db.
  3. Адрес хоста в WSL меняется: при каждом запуске получайте шлюз по умолчанию через ip route, а не прописывайте его вручную.

Хватит ждать сеть?

Регистрация за минуту. Подключение в один клик.