Порти Docker: конфігурація та використання
16:50, 02.06.2026
Вступ
Docker кардинально змінив підхід розробників до створення, розгортання та управління додатками завдяки використанню контейнеризації. Одним із ключових компонентів роботи з контейнерами Docker є управління портами, які необхідні для зв’язку між вашими контейнеризованими службами та зовнішнім світом. Незалежно від того, чи ви відкриваєте веб-сервер на порту 80, чи власний додаток на 8080, розуміння конфігурації портів Docker є життєво важливим для ефективної оркестрації контейнерів.
Ця стаття розповість вам про мапування портів у Docker — що це таке, чому це важливо та як це налаштувати, навіть для запущених контейнерів.
Чому мапування портів є важливим
Контейнери за замовчуванням ізольовані від хост-системи. Коли контейнеризований додаток внутрішньо слухає на певному порту, цей порт має бути явно прив’язаний до порту на хост-машині, щоб бути доступним зовні.
Приклад: docker run -p 8080:80 nginx
Це прив’язує порт 80 всередині контейнера до порту 8080 на хості, роблячи сервер NGINX доступним через localhost:8080.
Без прив'язки портів:
- До додатків залишається неможливо отримати доступ з-поза меж мережі Docker.
- Служби не можуть взаємодіяти між контейнерами або системами.
- Розробка та налагодження стають складнішими.
Як додати нову прив'язку портів до контейнера, що працює
Docker не підтримує додавання нових прив'язок портів безпосередньо до контейнера, що вже працює. Прапорець -p працює лише під час фази створення контейнера (docker run).
Щоб відкрити новий порт:
- Ви повинні перестворити контейнер із новою конфігурацією портів.
- Як альтернатива, використовуйте обхідний шлях, наприклад, за допомогою Docker commit та перезапуску (описано нижче).
Перезапуск контейнера з оновленими налаштуваннями
Якщо ви хочете оновити прив'язку портів:
Кроки:
- Зупиніть контейнер:
docker stop <container_name_or_id> - Видаліть контейнер (дані залишаться недоторканими, якщо використовуються томи):
docker rm <container_name_or_id> - Створіть його заново з новими прив’язками портів:
docker run -d -p 8080:80 --name my-nginx nginx Переконайтеся, що ви зберегли всі необхідні томи, змінні середовища або мережі під час повторного створення контейнера.
Перезапуск за допомогою Docker Commit
Якщо у контейнері, що працює, є власні налаштування, які ви не хочете втратити:
Кроки:
- Збережіть стан контейнера у новому образі:
docker commit <container_id> myimage:withports - Запустіть новий контейнер із зафіксованого образу з оновленими портами:
docker run -d -p 8080:80 --name new_container myimage:withports Цей метод дозволяє зберегти поточну файлову систему контейнера, відкриваючи при цьому нові порти.
Як змінювати налаштування Docker на льоту
Хоча Docker не дозволяє змінювати порти контейнерів у режимі реального часу, ви можете внести більш широкі зміни в конфігурацію Docker для майбутньої поведінки контейнерів або з метою налагодження.
1. Зупинка контейнера та служби Docker
Зупиніть контейнер, а потім демон Docker (може знадобитися sudo):
docker stop <container_name> sudo systemctl stop docker
2. Пошук файлів конфігурації
Налаштування Docker часто знаходяться в:
- Linux: /etc/docker/daemon.json
- Windows/Mac (Docker Desktop): через графічний інтерфейс або ~/.docker/config.json
3. Внесення змін до конфігурації
Відредагуйте файл daemon.json, щоб визначити власні відповідності портів або експериментальні функції.
Приклад:
{
"iptables": true,
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}Примітка: Прив’язки портів тут безпосередньо не змінюються, але можна налаштувати інші параметри мережевої роботи.
4. Перевірка оновленої конфігурації
Перевірте на наявність синтаксичних помилок:
sudo dockerd --config-file /etc/docker/daemon.json --debug
У разі успіху перезапустіть службу Docker:
sudo systemctl start docker
5. Застосування нового прив’язування портів до контейнера, що працює
Після перезапуску Docker:
- Створіть новий контейнер із потрібним прив’язуванням портів.
- Використовуйте docker exec, docker cp або підключення томів для перенесення даних зі старого контейнера, якщо це потрібно.
Висновок
Прив'язка портів у Docker є основою для розгортання доступних мережевих додатків. Хоча Docker не дозволяє змінювати порти на льоту для активних контейнерів, існують надійні робочі процеси для переконфігурації контейнерів із новими налаштуваннями, включаючи фіксацію контейнерів та їх повторне створення. Розуміння цих практик гарантує підтримку безперебійної роботи, доступності та масштабованості в контейнеризованих середовищах.