К содержимому

Прокси для Docker: демон, Desktop, сборка и контейнеры

В Docker прокси задаётся в четырёх независимых местах: демон, который скачивает образы, Docker Desktop, сборка и запускаемые вами контейнеры. Здесь разобрано каждое и то, как его проверить.

Что прокси меняет и чего не меняет

Прокси меняет только сетевой выход того трафика, который вы на него направили. Условия реестра и скачиваемых образов он не меняет, как и правила подписки самого Docker Desktop: в его документации, например, сказано, что поддержка SOCKS5 требует подписки Business. В документации Docker также предупреждают, что настройки прокси могут содержать конфиденциальные данные: переменные окружения читаются через удалённый API и могут попасть в образ при коммите, поэтому не зашивайте прокси с паролем в образ, которым делитесь.

Четыре места — четыре настройки

Docker — это несколько программ, и каждая берёт прокси из своего места. Демон (dockerd) — фоновая служба, которая скачивает образы, поэтому docker pull использует прокси демона. У Docker Desktop на Windows и Mac свой экран настроек. Сборка идёт в отдельном контейнере сборки и получает прокси через аргументы сборки. Запускаемый вами контейнер получает прокси только из переменных, заданных внутри него. Настройка одного места не включает остальные, поэтому сначала определите, что именно не работает: не скачивается образ — демон или Desktop; не качает строка RUN в Dockerfile — сборка; программа внутри запущенного контейнера не подключается — контейнер.

Загрузка образов на Linux: демон

В обычной установке Linux документация Docker использует drop-in для systemd — небольшой файл, добавляющий переменные окружения в docker.service. Создайте /etc/systemd/system/docker.service.d/http-proxy.conf с секцией [Service] и строками Environment для HTTP_PROXY, HTTPS_PROXY и NO_PROXY, затем выполните systemctl daemon-reload и systemctl restart docker. NO_PROXY — список адресов через запятую, которые не должны идти через прокси; оставьте в нём localhost и 127.0.0.1. В rootless-режиме файл лежит в ~/.config/systemd/user/docker.service.d/http-proxy.conf, а в командах нужен --user. Последняя команда в примере выводит переменные, которые теперь есть у службы, — так проверку предлагает и страница Docker.

По той же странице, спецсимволы в значении прокси (такие как #?!()[]{}) нужно экранировать дважды через %%. Значит, # в пароле в этом файле пишется как %%23, а не %23, как в обычной командной строке. В HTTPS_PROXY тоже указывайте http://: адрес прокси тот же, а шифруется только проходящий через него трафик.

Демон через systemd: пример

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://USERNAME:PASSWORD@HOST:PORT"
Environment="HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

То же самое в daemon.json

Вместо systemd можно добавить блок proxies в конфигурационный файл демона: /etc/docker/daemon.json на Linux и C:\ProgramData\docker\config\daemon.json на Windows. Ключи — http-proxy, https-proxy и no-proxy. После правки перезапустите демон Docker. Если в файле уже есть другие настройки, добавьте блок внутрь имеющихся фигурных скобок, а не создавайте вторую пару. Не задавайте один и тот же прокси и в drop-in, и в daemon.json: выберите что-то одно.

То же самое в daemon.json: пример

{
  "proxies": {
    "http-proxy": "http://USERNAME:PASSWORD@HOST:PORT",
    "https-proxy": "http://USERNAME:PASSWORD@HOST:PORT",
    "no-proxy": "localhost,127.0.0.1"
  }
}

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Docker Desktop (Windows и Mac)

  1. Откройте Settings > Resources > Proxies

    В Docker Desktop две настройки прокси. Docker Desktop proxy отвечает за само приложение (вход, командная строка, расширения). Containers proxy — за docker image pull, включая загрузки Compose. Если Containers proxy не задан, для загрузки используется Desktop proxy.

  2. Выберите Manual configuration

    В оба поля, Web Server (HTTP) и Secure Web Server (HTTPS), впишите http://HOST:PORT. В списке исключений указывают хосты и домены, которые не должны идти через прокси.

  3. Введите логин и пароль, когда попросят

    Для прокси с Basic-аутентификацией, как сказано в документации, Docker Desktop показывает запрос учётных данных и хранит их в хранилище учётных данных операционной системы. Можно ли писать логин и пароль прямо в полях адреса, в документации не сказано, поэтому используйте запрос.

  4. Примените и перезапустите

    Нажмите Apply, дождитесь перезапуска Docker Desktop и проверьте командами из раздела проверки ниже.

HTTP или SOCKS5

Docker Desktop поддерживает HTTP/HTTPS и SOCKS5, но в его документации сказано, что SOCKS5 требует подписки Business. На странице про демон для Linux SOCKS не упоминается вовсе. Поэтому для Docker при создании прокси выбирайте HTTP — так сделаны и примеры здесь.

Прокси при docker build

Загрузки внутри Dockerfile (например, RUN apt-get update или RUN npm install) выполняются в контейнере сборки. Для этого в Docker есть предопределённые аргументы сборки: HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, NO_PROXY и ALL_PROXY. Их передают через --build-arg, объявлять в Dockerfile не нужно. По умолчанию они не попадают в кэш сборки и в docker history, но если Dockerfile на них ссылается, прокси остаётся в кэше. Если у вас уже есть блок proxies в ~/.docker/config.json (следующий раздел), эти аргументы подставляются автоматически. Не используйте инструкцию ENV для прокси: страница Docker советует аргументы сборки, потому что ENV сохраняется в образе.

Прокси при docker build: пример

docker build --build-arg HTTP_PROXY=http://USERNAME:PASSWORD@HOST:PORT \
  --build-arg HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT .

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Прокси внутри запускаемых контейнеров

Клиент Docker может сам задавать переменные прокси в каждом новом контейнере. Добавьте блок proxies в ~/.docker/config.json на машине, где вы запускаете docker. При старте контейнера Docker выставляет в нём HTTP_PROXY, http_proxy, HTTPS_PROXY, https_proxy, NO_PROXY и no_proxy. Файл действует без перезапуска Docker, но только для новых контейнеров и сборок, а не для уже запущенных. Для одного контейнера можно вместо этого передать --env, как во втором примере. Программы внутри контейнера должны сами читать эти переменные: curl и многие инструменты читают, некоторые — нет.

На той же странице предупреждают, что внутренний адрес прокси может быть недоступен из контейнера, а значения прокси читаются через API. Используйте адрес прокси, до которого контейнер дотягивается.

Прокси в контейнерах: ~/.docker/config.json

{
  "proxies": {
    "default": {
      "httpProxy": "http://USERNAME:PASSWORD@HOST:PORT",
      "httpsProxy": "http://USERNAME:PASSWORD@HOST:PORT",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Прокси для одного контейнера: пример

docker run --rm --env HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT curlimages/curl -s https://ipinfo.io/json

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Как проверить, что Docker использует прокси

  1. Демон: посмотрите переменные

    На Linux выполните sudo systemctl show --property=Environment docker и найдите HTTP_PROXY и HTTPS_PROXY. В Docker Desktop откройте Settings > Resources > Proxies.

  2. Скачайте крошечный образ

    Выполните docker pull hello-world. Если образ скачался, демон (или Desktop) добрался до реестра через прокси. Если истекло время ожидания, проверьте прокси вне Docker командой curl из примера.

  3. Контейнеры: выведите переменные

    docker run --rm alpine env | grep -i proxy покажет переменные прокси, которые новый контейнер получил из ~/.docker/config.json.

  4. Проверьте адрес выхода

    Команда curl покажет IP, страну и сеть, которые видят сайты через тот же прокси. Поля разобраны в руководстве о проверке IP, страны и провайдера прокси.

Как проверить, что Docker использует прокси: пример

docker pull hello-world
docker run --rm alpine env | grep -i proxy
curl -x http://USERNAME:PASSWORD@HOST:PORT https://ipinfo.io/json

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Частые ошибки

• После правки drop-in загрузка по-прежнему зависает. Не выполнены systemctl daemon-reload и перезапуск, либо неверно имя файла или строка [Service]. Выведите переменные через systemctl show.

• 407 Proxy Authentication Required. Прокси отклонил логин или пароль. В файлах systemd и daemon.json спецсимволы пишут в форме %%, как описано выше; можно заново скопировать данные из «Мои активы».

• Образ скачивается, но строка RUN в Dockerfile не качает. Сборка не использует прокси демона: передайте --build-arg или заполните ~/.docker/config.json.

• Запущенный контейнер не видит новый config.json. Он действует только для новых контейнеров; запустите свежий.

• Всё работает, кроме локальных служб. Добавьте их в NO_PROXY (localhost, 127.0.0.1 и ваши внутренние домены).

Как это сделать с Proxy302

Для любой команды здесь нужны только хост, порт, логин и пароль прокси Proxy302. Трафик ротационных резидентных прокси оплачивается за ГБ, страна выхода задаётся при создании прокси; HTTP — порт 2222, SOCKS5 — порт 3333 на proxy.proxy302.com. Статический ISP IP фиксирован на весь срок аренды и не ротируется — удобно, если инструмент должен всегда выходить с одного адреса. HTTP или SOCKS5 выбирают при покупке, один IP работает с одним протоколом.

Как это сделать с Proxy302: шаги

  1. Шаг 1

    Откройте страницу ротационных резидентных прокси, выберите линию, оставьте протокол HTTP (или выберите SOCKS5) и нажмите «Проверить цену и создать».

  2. Шаг 2

    Откройте «Мои активы» (раздел консоли со всем, что вы купили) и скопируйте HOST, PORT, USERNAME и PASSWORD. На странице «Подключение» есть готовый пример с вашими данными.

  3. Шаг 3

    Подставьте значения в команды выше.

  4. Шаг 4

    Подтвердите выход запросом к https://ipinfo.io/json через прокси.

  5. Шаг 5

    Из материкового Китая сначала запустите вспомогательную программу на странице «Подключение» и держите её открытой, пока работает прокси.

Цены и ограничения

Бюджетная линия стоит $1,50 за ГБ, $1,35 за ГБ в пакете 100 ГБ и $1,20 за ГБ при 300 ГБ. Статический ISP IP — $0,50 за один день и $7,99 за 30 дней. Бесплатного пробного периода нет, минимальная покупка — 1 ГБ или один IP на один день. Набор доступных локаций меняется ежедневно.

Вопросы и ответы

Можно ли задать SOCKS5-прокси в Docker?

Docker Desktop заявляет поддержку SOCKS5, но для неё нужна подписка Business, а на странице про демон SOCKS не упоминается. Для Docker выбирайте HTTP-прокси.

Почему docker pull работает, а npm install в Dockerfile — нет?

Базовый образ скачивает демон, а строка RUN выполняется в контейнере сборки. Передайте --build-arg HTTP_PROXY и HTTPS_PROXY или используйте ~/.docker/config.json.

Должен ли HTTPS_PROXY начинаться с https://?

Нет. Адрес прокси тот же и обычно начинается с http://, как в примерах. Использует ли сам прокси TLS, зависит от его настройки.

Действует ли прокси демона на мои контейнеры?

Нет, прокси демона нужен для его собственных загрузок, например образов. Контейнеры получают переменные прокси из ~/.docker/config.json или через --env.

Ссылки и источники

6
  1. Docker docs: Daemon proxy configuration

    Официальная документация · Проверено:

    Read on 2 November 2026: the daemon.json proxies object with http-proxy, https-proxy and no-proxy (restart the daemon after editing); the systemd drop-in /etc/systemd/system/docker.service.d/http-proxy.conf with Environment lines for HTTP_PROXY, HTTPS_PROXY and NO_PROXY, then systemctl daemon-reload and systemctl restart docker; rootless mode uses ~/.config/systemd/user/docker.service.d/http-proxy.conf with systemctl --user; verification with systemctl show --property=Environment docker; NO_PROXY is a comma-separated list; special characters such as #?!()[]{} in the proxy value must be double escaped with %%.

    The page does not mention SOCKS proxies and does not use docker info for verification.

  2. Docker docs: Daemon configuration

    Официальная документация · Проверено:

    Read on 2 November 2026: default location of daemon.json is /etc/docker/daemon.json on Linux and C:\ProgramData\docker\config\daemon.json on Windows; a different file can be set with dockerd --config-file.

    The page read did not say how to restart the daemon.

  3. Docker docs: Configure the Docker client to use a proxy server

    Официальная документация · Проверено:

    Read on 2 November 2026: the proxies block in ~/.docker/config.json (httpProxy, httpsProxy, noProxy under "default"); it takes effect without restarting Docker but only for new containers and builds; containers get HTTP_PROXY, http_proxy, HTTPS_PROXY, https_proxy, NO_PROXY, no_proxy (and FTP_PROXY, ALL_PROXY for matching settings); docker run --env for one container; build arguments for proxies are pre-populated from the config file and are only available in the build container; do not use the ENV instruction for proxies; proxy settings may contain sensitive information and environment variables can be inspected through the remote API or committed to an image.

  4. Docker docs: Docker Desktop settings (Proxies)

    Официальная документация · Проверено:

    Read on 2 November 2026: Settings > Resources > Proxies; two settings, Docker Desktop proxy (host-level traffic, fallback for docker image pull) and Containers proxy (docker image pull, including Compose, and traffic of running containers when air-gapped container enforcement is configured); Manual configuration takes a Web Server (HTTP) and a Secure Web Server (HTTPS) URL in the form http://proxy:port or https://proxy:port and a list of hosts that skip the proxy; HTTP/HTTPS and SOCKS5 are supported, SOCKS5 requires a Business subscription; Basic authentication makes Docker Desktop ask for credentials and store them in the OS credential store, an https:// proxy URL protects the password in transit.

    The page section does not say how the proxy applies to docker build, and does not say whether user:password may be written inside the URL fields.

  5. Docker docs: Build variables (proxy arguments)

    Официальная документация · Проверено:

    Read on 2 November 2026: HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, NO_PROXY and ALL_PROXY are pre-defined build arguments that need not be declared in the Dockerfile; example docker build --build-arg HTTP_PROXY=https://my-proxy.example.com .; they are excluded from the build cache and from docker history by default, unless the Dockerfile references them.

  6. Proxy302 product facts and price list

    Наблюдение за продуктом · Проверено:

    Product facts file of the site (values checked against the console, the backend and the price table on 18-19 October 2026): products, prices in US$ (1 PTC = US$1), lease terms, protocols and ports, countries, quantity limits, no free trial.

Готовы попробовать?

Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.