Налаштовуємо проксі-сервер на платформі Docker

Покрокове керівництво з налаштування проксі-сервера в Docker через командний рядок (CLI) та файл конфігурації config.json. Навіщо потрібен Docker проксі.

Олександр Л.

Олександр Л.

12 червня 2025 р.3 353

Налаштування проксі-сервера може знадобитися на платформі Docker у ряді випадків. Найпоширенішими є обхід лімітів веб-провайдера та проведення тестів розробленого вами ПЗ у багатьох геолокаціях. Почнемо з розгляду поняття Докера.

Що собою являє Докер

Докером називається набір продуктів, реалізованих за принципом «платформа як услуга» (PaaS), які використовують віртуалізацію на рівні ОС, щоб доставляти програмне забезпечення в пакетах, званих контейнерами, тобто, здійснювати контейнеризацію пакетів. У сервісу передбачені різні за оплатою рівні: безкоштовний і преміум з розширеними функціями. Дане програмне забезпечення було випущено у 2013 році. Інакше кажучи, Докером називають платформу для розробки, доставки та запуску програмного забезпечення, в якій можна відокремити ваше ПЗ від вашої інфраструктури. Таким чином, зібраний контейнер можна запускати на різних ОС. Крім того, вам буде приємно дізнатися, що платформа Docker підтримує SSL, що дає відмінний ступінь інформаційно-мережевої безпеки при роботі з нею, зокрема, при тестуванні роботи додатків. Контейнеризована інформація містить:

  • Саме ПЗ, запуск якого потрібен розробнику;
  • Середовище виконання — віртмашину з набором мінімально необхідних процесів;
  • Необхідні для запуску ПЗ файли;
  • Сервер.

Налаштовуємо проксі в Докері

Є 2 шляхи налаштування: за допомогою командного рядка та використовуючи конфіг. Робота в ком рядку виглядає так:

  1. Оскільки ви будете використовувати параметр proxy.example.com:Port, вам треба дізнатися айпі адресу свого proxy і використовуваний port.
  2. В ком рядку пишемо команду docker build, яка створює конфіг. У ній необхідно використовувати аргумент --build-arg. Повна команда виглядатиме таким чином: Bash
    docker build --build-arg HTTP_PROXY="http://proxy.example.com:Port" .
    
  3. Потім у командному ж рядку вводимо команду docker run для запуску створеного конфігу. Необхідно використовувати аргумент --env. Повна команда виглядатиме наступним чином: Bash
    docker run --env HTTP_PROXY="http://proxy.example.com:Port" redis
    

Налаштування Docker проксі за допомогою конфігу виглядає так:

  1. В робочій директорії знаходите папку .docker. В ній має бути файл, названий config.json. Створіть його у разі відсутності.
  2. У файлі, використовуючи кодовий редактор, який вам подобається, вводите рядки: JSON
    {
     "proxies": {
       "default": {
         "httpProxy": "http://proxy.example.com:Port",
         "httpsProxy": "https://proxy.example.com:Port",
         "ftpProxy": "https://proxy.example.com:Port",
         "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
       }
     }
    }
    
  3. На місці proxy.example.com:Port мають бути вказані дані вашого айпі та port, як і в прикладі з ком рядком.
  4. У файлі конфігу, як видно з коду вище, ви можете використовувати 4 варіанти проксі:
    • HttpProxy — для http варіанту з відсутнім шифруванням;
    • HttpsProxy — для https варіанту з наявним шифруванням;
    • ftpProxy — для ftp варіанту з метою передачі файлів, використовуючи ftp;
    • noProxy — для спрямування прямого трафіку.

Аналогічні варіанти проксі ви повинні використовувати і при роботі з ком рядком, залежно від того, яким є ваш проксі. Після збереження файлу конфігу docker proxy, вказані вами відомості будуть застосовуватися до всіх нових контейнерів і для вже готових контейнерів, що завантажуються з репозиторію Докера.


Популярні запитання

Як налаштувати авторизацію (логін та пароль) для проксі в Docker?

Якщо ваші проксі вимагають аутентифікації за логіном та паролем, їх необхідно додати безпосередньо в URL-адресу проксі всередині конфігураційного файлу або команди. Формат запису виглядає так: http://username:[email protected]:Port. Зверніть увагу: якщо пароль містить спецсимволи (наприклад, @, :, /), їх потрібно закодувати у форматі URL-encode.

Конфігурація, прописана у файлі ~/.docker/config.json, застосовується як параметри середовища (environment variables) виключно в момент створення або запуску нових контейнерів. Вже запущені контейнери не можуть динамічно зчитувати зміни з цього файлу. Щоб вони почали працювати через проксі, їх необхідно зупинити, видалити та запустити заново.

Для того щоб сам Docker міг завантажувати образи (виконувати docker pull) через проксі, налаштувань користувача в config.json недостатньо. Потрібно налаштувати проксі для системної служби (Docker daemon). У системах Linux це робиться через створення файлу конфігурації за шляхом /etc/systemd/system/docker.service.d/http-proxy.conf із зазначенням змінних середовища HTTP_PROXY та HTTPS_PROXY, після чого потрібно перезапустити службу командою systemctl restart docker.

Для цього використовується параметр noProxy у файлі конфігурації або аргумент --env NO_PROXY="...". У ньому через кому вказуються доменні імена, хости або підмережі, трафік до яких має йти напряму. Обов'язково додавайте туди значення localhost, 127.0.0.1, а також маску внутрішньої мережі вашого Docker-середовища, щоб не заблокувати міжконтейнерну взаємодію.

Так. Файл config.json задає дефолтні (глобальні) налаштування для всіх контейнерів. Якщо вам потрібно, щоб певний контейнер працював через інші проксі, просто перевизначте змінні середовища безпосередньо під час його запуску за допомогою ключів -e HTTP_PROXY="..." та -e HTTPS_PROXY="..." у команді docker run. Параметри командного рядка мають вищий пріоритет.

Офіційно Docker у файлі config.json очікує параметри httpProxy та httpsProxy. Проте багато сучасних інструментів та базових образів підтримують протокол SOCKS5, якщо вказати його в схемі URL: socks5://proxy.example.com:Port або socks5h://... (щоб DNS-запити також йшли через проксі). Якщо якийсь конкретний софт всередині контейнера не підтримує socks, доведеться використовувати сторонні утиліти для конвертації трафіку (наприклад, proxychains або privoxy).