Як налаштувати мапінг портів у Docker: покрокова інструкція

Мапінг портів у Docker — це процес перенаправлення мережевого трафіку з порту вашої хостової машини (комп’ютера, де працює Docker) на порт контейнера, який виконується в ізольованому середовищі. Це дозволяє доступ до сервісів всередині контейнера ззовні.

Як працює мапінг портів?

Docker-контейнер, зазвичай, працює в окремому мережевому просторі і має власні порти, які не є доступними для зовнішнього світу без явного налаштування. Мапінг портів дозволяє направляти запити до хостового комп’ютера на певний порт контейнера, на якому виконується додаток.

Приклад команди для мапінгу портів

Щоб запустити контейнер з мапінгом портів, використовується ключ -p або --publish у команді docker run.

docker run -p <host_port>:<container_port> <image_name>
  • <host_port> — це порт на хостовій машині, який ви хочете використати.

  • <container_port> — це порт усередині контейнера, на якому додаток слухає запити.

  • <image_name> — назва образу Docker, який ви запускаєте.

Приклад

Допустимо, ви запускаєте веб-сервер, який у контейнері слухає на порту 80. Якщо ви хочете, щоб цей веб-сервер був доступний через порт 8080 вашої хостової машини, команда буде виглядати так:

docker run -p 8080:80 my-web-server

Тепер усі запити до localhost:8080 на вашому комп’ютері будуть перенаправлятися на порт 80 всередині контейнера.

Декілька мапінгів портів

Можна мапити декілька портів одночасно. Наприклад:

docker run -p 8080:80 -p 8443:443 my-web-server

У цьому випадку порт 8080 хостової машини буде перенаправлятись на порт 80 контейнера, а порт 8443 — на порт 443.

Короткий опис варіантів мапінгу портів:

  1. TCP або UDP: За замовчуванням Docker використовує TCP, але можна явно вказати тип протоколу, додавши /tcp або /udp після порту:

    docker run -p 8080:80/tcp -p 8443:443/udp my-server
    
  2. Вибір випадкового порту: Якщо замість номера порту на хості вказати 0, Docker сам вибере вільний порт на хості:

    docker run -p 0:80 my-web-server
    

Перевірка мапінгу портів

Щоб перевірити, на яких портах ваш контейнер, можна скористатися командою:

docker ps

Виведе щось на зразок:

CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                  NAMES
e3a1b2c3d4e5   my-web-server   "nginx -g 'daemon of…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp   web_server_1

Тут видно, що порт 8080 на хості мапиться на порт 80 у контейнері.

Корисні додаткові опції:

  1. –network host: Запуск контейнера з мережею хоста. У цьому випадку контейнер використовує мережеві інтерфейси та порти хостової машини напряму.

    docker run --network host my-web-server
    
  2. –publish-all або -P: Мапить усі відкриті порти контейнера на випадкові порти хоста.

    docker run -P my-web-server
    

Висновок

Мапінг портів у Docker — це простий і ефективний спосіб отримати доступ до сервісів, які працюють всередині контейнера, ззовні. За допомогою параметра -p, ви можете точно налаштувати, які порти будуть доступні, а також захистити інші порти від небажаного доступу.