Linux Labs

Контейнеры: Docker и compose / Ступень 7 из 11

Сеть контейнеров: имена и порты

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · теория · 5 мин

Порт соседа

Имя соседа найдено. Здесь — какой порт писать рядом с ним.

Ключ -p 15432:5432 публикует порт на хосте: Docker слушает 15432 на адресах хоста и пересылает подключения в контейнер на 5432. Это вход для тех, кто приходит с хоста и снаружи.

Соседи по сети подключаются к контейнеру напрямую. Имя db ведёт на его адрес в сети, и порт рядом с ним — тот, что слушает программа внутри: 5432. Базе, к которой ходят только соседи, -p не нужен вовсе. Публикуют порт у входного контейнера — например, у веб-сервера, к которому приходят пользователи.

localhost в контейнере — сам контейнер: nc localhost 5432 из app подключается к app, где порт 5432 никто не слушает.

Откуда подключение Адрес
с хоста localhost:15432 — опубликованный порт
из контейнера той же сети db:5432 — имя и порт программы
Проверь себя 1 вопрос

db запущен с -p 15432:5432 и вместе с app в своей сети. Что напечатает sudo docker exec app nc -w 2 db 15432?

  • В общей своей сети имя db находится. Подключение срывается дальше — на порту.

  • Имя ведёт прямо на адрес контейнера в сети, мимо хоста. Через хост идёт подключение к адресу хоста — например, к localhost:15432 на самом сервере.

  • Порт 15432 слушает Docker на хосте. Имя db ведёт на адрес самого контейнера, а там слушается только 5432.

Имя db ведёт на адрес контейнера, и nc подключается к его порту 15432 — там никто не слушает. Опубликованный порт есть только на хосте. Соседи подключаются к порту, который слушает сам db, — 5432.

Главное в шаге

  • Опубликованный порт слушает Docker на хосте; соседям по сети он не нужен.
  • Сосед подключается по имени контейнера и порту, который слушает программа внутри.
  • localhost в контейнере ведёт в сам контейнер.
Ubuntu 24.04
Загрузка…