Прокси в Linux: настройка
Прокси в Linux: переменные http_proxy, https_proxy и no_proxy, как сделать их постоянными, панель прокси в GNOME и настройка прокси для apt и dnf.
В Docker прокси задаётся в четырёх независимых местах: демон, который скачивает образы, Docker Desktop, сборка и запускаемые вами контейнеры. Здесь разобрано каждое и то, как его проверить.
Прокси меняет только сетевой выход того трафика, который вы на него направили. Условия реестра и скачиваемых образов он не меняет, как и правила подписки самого Docker Desktop: в его документации, например, сказано, что поддержка SOCKS5 требует подписки Business. В документации Docker также предупреждают, что настройки прокси могут содержать конфиденциальные данные: переменные окружения читаются через удалённый API и могут попасть в образ при коммите, поэтому не зашивайте прокси с паролем в образ, которым делитесь.
Docker — это несколько программ, и каждая берёт прокси из своего места. Демон (dockerd) — фоновая служба, которая скачивает образы, поэтому docker pull использует прокси демона. У Docker Desktop на Windows и Mac свой экран настроек. Сборка идёт в отдельном контейнере сборки и получает прокси через аргументы сборки. Запускаемый вами контейнер получает прокси только из переменных, заданных внутри него. Настройка одного места не включает остальные, поэтому сначала определите, что именно не работает: не скачивается образ — демон или Desktop; не качает строка RUN в Dockerfile — сборка; программа внутри запущенного контейнера не подключается — контейнер.
В обычной установке 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://: адрес прокси тот же, а шифруется только проходящий через него трафик.
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 значениями из «Мои активы».
Вместо 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: выберите что-то одно.
{
"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 две настройки прокси. Docker Desktop proxy отвечает за само приложение (вход, командная строка, расширения). Containers proxy — за docker image pull, включая загрузки Compose. Если Containers proxy не задан, для загрузки используется Desktop proxy.
В оба поля, Web Server (HTTP) и Secure Web Server (HTTPS), впишите http://HOST:PORT. В списке исключений указывают хосты и домены, которые не должны идти через прокси.
Для прокси с Basic-аутентификацией, как сказано в документации, Docker Desktop показывает запрос учётных данных и хранит их в хранилище учётных данных операционной системы. Можно ли писать логин и пароль прямо в полях адреса, в документации не сказано, поэтому используйте запрос.
Нажмите Apply, дождитесь перезапуска Docker Desktop и проверьте командами из раздела проверки ниже.
Docker Desktop поддерживает HTTP/HTTPS и SOCKS5, но в его документации сказано, что SOCKS5 требует подписки Business. На странице про демон для Linux SOCKS не упоминается вовсе. Поэтому для Docker при создании прокси выбирайте HTTP — так сделаны и примеры здесь.
Загрузки внутри 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 --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. Используйте адрес прокси, до которого контейнер дотягивается.
{
"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 значениями из «Мои активы».
На Linux выполните sudo systemctl show --property=Environment docker и найдите HTTP_PROXY и HTTPS_PROXY. В Docker Desktop откройте Settings > Resources > Proxies.
Выполните docker pull hello-world. Если образ скачался, демон (или Desktop) добрался до реестра через прокси. Если истекло время ожидания, проверьте прокси вне Docker командой curl из примера.
docker run --rm alpine env | grep -i proxy покажет переменные прокси, которые новый контейнер получил из ~/.docker/config.json.
Команда curl покажет IP, страну и сеть, которые видят сайты через тот же прокси. Поля разобраны в руководстве о проверке IP, страны и провайдера прокси.
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. Трафик ротационных резидентных прокси оплачивается за ГБ, страна выхода задаётся при создании прокси; HTTP — порт 2222, SOCKS5 — порт 3333 на proxy.proxy302.com. Статический ISP IP фиксирован на весь срок аренды и не ротируется — удобно, если инструмент должен всегда выходить с одного адреса. HTTP или SOCKS5 выбирают при покупке, один IP работает с одним протоколом.
Откройте страницу ротационных резидентных прокси, выберите линию, оставьте протокол HTTP (или выберите SOCKS5) и нажмите «Проверить цену и создать».
Откройте «Мои активы» (раздел консоли со всем, что вы купили) и скопируйте HOST, PORT, USERNAME и PASSWORD. На странице «Подключение» есть готовый пример с вашими данными.
Подставьте значения в команды выше.
Подтвердите выход запросом к https://ipinfo.io/json через прокси.
Из материкового Китая сначала запустите вспомогательную программу на странице «Подключение» и держите её открытой, пока работает прокси.
Бюджетная линия стоит $1,50 за ГБ, $1,35 за ГБ в пакете 100 ГБ и $1,20 за ГБ при 300 ГБ. Статический ISP IP — $0,50 за один день и $7,99 за 30 дней. Бесплатного пробного периода нет, минимальная покупка — 1 ГБ или один IP на один день. Набор доступных локаций меняется ежедневно.
Docker Desktop заявляет поддержку SOCKS5, но для неё нужна подписка Business, а на странице про демон SOCKS не упоминается. Для Docker выбирайте HTTP-прокси.
Базовый образ скачивает демон, а строка RUN выполняется в контейнере сборки. Передайте --build-arg HTTP_PROXY и HTTPS_PROXY или используйте ~/.docker/config.json.
Нет. Адрес прокси тот же и обычно начинается с http://, как в примерах. Использует ли сам прокси TLS, зависит от его настройки.
Нет, прокси демона нужен для его собственных загрузок, например образов. Контейнеры получают переменные прокси из ~/.docker/config.json или через --env.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Наблюдение за продуктом · Проверено:
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 — настроить его в браузере можно за несколько минут.