У статті розглядаються практичні приклади, типові помилки під час запуску та поради, як перевірити, чи працює ваш контейнер коректно. Ви дізнаєтесь, коли host-network у Docker справді потрібен, а коли краще залишитися на звичайному bridge-режимі.

Як використовувати Docker Compose з конфігурацією мережі хоста
Цей посібник проведе вас через використання Docker Compose з конфігурацією мережі хоста на хмарній віртуальній машині LabEx. Docker Compose – це інструмент, який допомагає керувати кількома контейнерами – уявіть собі контейнери як легкі, ізольовані середовища, які запускають програми, такі як веб-сервер. Зазвичай Docker ізолює мережу контейнера від хост-машини (віртуальної машини, на якій ви працюєте), але опція мережі хоста дозволяє контейнеру безпосередньо використовувати мережу хоста.
Це зручно, коли вашій програмі потрібно діяти так, ніби вона працює безпосередньо на хості, наприклад, отримувати доступ до портів хоста без додаткового налаштування. Зрештою, ви налаштуєте Docker Compose, створите, розгорнете та протестуєте простий веб-сервіс за допомогою мережі хоста. Docker попередньо встановлено у вашому середовищі LabEx, але ми також забезпечимо готовність Docker Compose.
Налаштування Docker Compose
Перш ніж заглибитися в налаштування, переконаємося, що Docker Compose доступний на вашій віртуальній машині LabEx Cloud. Хоча Docker попередньо встановлено, Docker Compose — окремий інструмент для керування багатоконтейнерними налаштуваннями — може бути відсутнім. Ми швидко встановимо його за допомогою терміналу.
Відкрийте термінал у вашій віртуальній машині LabEx. У запиті має з’явитися вікно з’ясування /home/labex/project— це ваш робочий каталог за замовчуванням. Виконайте ці команди одну за одною:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Ось що вони роблять:
-
curlЗавантажує бінарний файл Docker Compose з офіційного релізу на GitHub. URL-адреса використовується $(uname -s)-$(uname -m)для відповідності системі вашої віртуальної машини (наприклад, Linux-x86_64). Версія 2.20.2 є стабільною та широко сумісною.
-
-o /usr/local/bin/docker-composeЗберігає його в /usr/local/bin, стандартному місці для виконуваних інструментів. sudoгарантує, що у вас є дозвіл на запис туди.
-
chmod +x: Робить файл виконуваним, щоб ви могли запустити його як команду. Знову ж таки, sudoнадає необхідні права.
Щоб переконатися, що це спрацювало, виконайте:
docker-compose --version
Ви повинні побачити результат, подібний до Docker Compose version v2.20.2. Якщо ви отримуєте повідомлення «команда не знайдена», уважно повторіть команди — перевірте наявність друкарських помилок або проблем з Інтернетом (віртуальній машині потрібен доступ до Інтернету для завантаження). Цей крок гарантує, що ви готові до використання docker-composeв наступних кроках.
Створення файлу Docker Compose за допомогою Host Network
Тепер, коли Docker Compose готовий, давайте створимо docker-compose.ymlфайл — ваш план запуску веб-сервісу з мережею хоста. Ми використовуватимемо nano, простий та зручний для початківців текстовий редактор терміналу.
Щоб створити та відредагувати файл, виконайте такі дії:
У терміналі переконайтеся, що ви знаходитесь у каталозі проекту:
cd /home/labex/project
Створіть та відкрийте файл за допомогою nano:
nano docker-compose.yml
Введіть або вставте наступний вміст у nano:
version: "3"
services:
web:
image: nginx:latest
network_mode: host
Ось що означає кожна частина:
-
version: "3": Встановлює формат файлу Docker Compose. Версія 3 є поширеним стандартом, як і вибір шаблону.
-
services: Перелічує контейнери (або “сервіси”) для запуску, такі як воркери для вашого проєкту.
-
webНазиває ваш сервіс — назвіть його як завгодно, але «web» підходить для веб-сервера.
-
image: nginx:latest: Визначає програмне забезпечення — Nginx, популярний веб-сервер, з latestвитягуванням найновішої версії з Docker Hub (бібліотеки образів контейнерів).
-
network_mode: hostКлючовий параметр. Зазвичай Docker надає контейнерам власну приватну мережу, ізолюючи їх від хоста. hostmode дозволяє контейнеру використовувати мережу віртуальної машини безпосередньо, тому Nginx може отримати доступ до портів хоста (наприклад, 80) без додаткових кроків.
Щоб зберегти файл у форматі nano:
-
Натисніть Ctrl + X, щоб вийти
-
Натисніть Y, щоб підтвердити збереження змін
-
Натисніть Enter, щоб підтвердити назву файлу
Файл тепер збережено у форматі /home/labex/project, і ви готові до наступного кроку.
Розгортання застосунку Docker Compose
Після того, як ви docker-compose.ymlнабрали файли, давайте розгорнемо контейнер Nginx, наказавши Docker запустити його на основі вашого плану. Для цього переключіться в термінал.
У терміналі за адресою /home/labex/projectвиконайте команду:
docker-compose up -d
Розбиття на частини:
-
docker-composeІнструмент, який зчитує docker-compose.ymlта керує вашими послугами.
-
up: Запускає webслужбу (Nginx), визначену у файлі.
-
-d: Запускає його у фоновому режимі (“відокремлений”), тому ваш термінал залишається вільним.
Docker Compose завантажить nginx:latestобраз з Docker Hub, якщо його ще немає на віртуальній машині (ви можете побачити повідомлення про завантаження), а потім запустить контейнер. Перевірте, чи він працює, за допомогою:
docker ps
Тут перелічено активні контейнери. Шукайте nginx:latestв розділі “IMAGE” (ЗОБРАЖЕННЯ) та “Up” (Запущено) в розділі “STATUS” (наприклад, “Up 5 seconds” (Запущено 5 секунд)). Ви не побачите зіставлення портів (наприклад, 0.0.0.0:80->80/tcp), оскільки network_mode: hostвикористовує порти хоста безпосередньо. Якщо нічого не відображається, переконайтеся, що ви ввійшли в /home/labex/project( pwdщоб перевірити) та перезапустіть docker-compose up -d.
Тестування служби Nginx у мережі хоста
Тепер, коли контейнер працює з мережею хоста, давайте перевіримо, чи Nginx обслуговує веб-сторінки на порту хоста 80 — стандартному веб-порті.
У терміналі за адресою /home/labex/projectвиконайте команду:
curl localhost:80
Тут перелічено активні контейнери. Шукайте nginx:latestв розділі “IMAGE” (ЗОБРАЖЕННЯ) та “Up” (Запущено) в розділі “STATUS” (наприклад, “Up 5 seconds” (Запущено 5 секунд)). Ви не побачите зіставлення портів (наприклад, 0.0.0.0:80->80/tcp), оскільки network_mode: hostвикористовує порти хоста безпосередньо. Якщо нічого не відображається, переконайтеся, що ви ввійшли в /home/labex/project( pwdщоб перевірити) та перезапустіть docker-compose up -d.

Тестування служби Nginx у мережі хоста
Тепер, коли контейнер працює з мережею хоста, давайте перевіримо, чи Nginx обслуговує веб-сторінки на порту хоста 80 — стандартному веб-порті.
У терміналі за адресою /home/labex/projectвиконайте команду:
curl localhost:80
Що відбувається:
-
curl: Отримує дані з веб-адреси, як-от браузер на базі терміналу.
-
localhost:80: Підключається до самої віртуальної машини ( localhost) через порт 80. З network_mode: hostNginx контейнера використовує мережу хоста, тому його порт 80 є портом 80 хоста.
Ви повинні побачити HTML-код, що починається з <!DOCTYPE html>—сторінка вітання Nginx за замовчуванням. Зазвичай Docker ізолює контейнерні мережі, вимагаючи зіставлення портів (наприклад, порт хоста 80 з портом контейнера 80). Режим хоста пропускає це, дозволяючи Nginx безпосередньо прив’язуватися до порту 80 віртуальної машини.
Якщо ви отримуєте повідомлення «Відмовлено у з’єднанні», перевірте крок 3 — запустіть , docker psщоб підтвердити, що контейнер «Увімкнено». Перезапустіть за допомогою , docker-compose up -dякщо потрібно, або перевірте Docker за допомогою sudo service docker status. Тут немає браузера, тому curlнемає і вашого інструменту для тестування.
Дослідження журналів та очищення
Давайте перевіримо журнали контейнера, щоб побачити, що відбувається всередині — ключова навичка усунення несправностей — а потім очистимо його, видаливши.
Перевірити журнали
Виконати:
docker-compose logs web
-
docker-compose logs: Показує результати роботи ваших сервісів.
-
web: Цільова аудиторія webслужби з docker-compose.yml.
Шукайте рядки на кшталт «nginx starting» або «listening on 0.0.0.0:80». Якщо ви використовували curl, ви можете побачити зареєстроване повідомлення «GET /». Тут також відображатимуться помилки (наприклад, «port 80 failed») — корисно, якщо Nginx зупиняється.
Прибирання
Виконати:
docker-compose down
-
docker-compose downЗупиняє та видаляє контейнер, звільняючи порт 80 та прибираючи.
Перевірити за допомогою:
docker ps
Відсутність nginxрядка означає, що його більше немає. Якщо він залишається, перезапустіть docker-compose down. Він docker-compose.ymlзалишається, щоб ви могли перезапустити його пізніше за допомогою docker-compose up -d. Це завершує життєвий цикл: налаштування, розгортання, тестування та видалення.
Виправлення неполадок та найкращі практики
Ось як впоратися з проблемами та використовувати Docker Compose з розумом.
Поради щодо усунення несправностей
-
Контейнер не запускається : якщо docker psпорожній, перевірте docker-compose logs webнаявність помилок, таких як «порт використовується». Звільніть порт 80 за допомогою sudo lsof -i :80та sudo kill <PID>, потім docker-compose up -d.
-
Немає curlвідповіді : Підтвердіть, що контейнер запущено ( docker ps) та Docker працює ( sudo service docker status). Перезапустіть за допомогою docker-compose up -dабо sudo service docker restart.
-
Проблеми з файлами : Якщо docker-compose upфайл не знайдено, перевірте, чи ви знаходитесь у /home/labex/project( pwd) та docker-compose.ymlчи існує він ( ls).
Найкращі практики
-
Обмежити мережу хоста : це просто, але пропускає ізоляцію, ризикуючи безпекою, якщо працюють інші служби. Використовуйте це для лабораторій, а не для виробництва, якщо це не необхідно.
-
Попередня перевірка портів : спочатку протестуйте sudo netstat -tuln | grep :80—clear port 80.
-
Зберегти файли : Зберегти docker-compose.ymlдля /home/labex/projectповторного використання.
-
Журнали спостереження : Регулярно перевіряйте журнали, щоб виявляти проблеми на ранній стадії.
Ці звички роблять ваш Docker надійною роботою та навчають вас основним навичкам.
Короткий зміст
Ви встановили Docker Compose, створили docker-compose.ymlфайл із мережею хоста, розгорнули контейнер Nginx, протестували його, перевірили журнали та очистили. Мережа хоста дозволяє контейнерам використовувати мережу хоста безпосередньо, пропускаючи ізоляцію Docker — потужний трюк. Ці кроки створюють основу для керування додатками Docker Compose та усунення несправностей, готуючи вас до більших проектів.