Имя соседа найдено. Здесь — какой порт писать рядом с ним.
Ключ -p 15432:5432 публикует порт на хосте: Docker слушает 15432 на адресах хоста и пересылает подключения в контейнер на 5432. Это вход для тех, кто приходит с хоста и снаружи.
Соседи по сети подключаются к контейнеру напрямую. Имя db ведёт на его адрес в сети, и порт рядом с ним — тот, что слушает программа внутри: 5432. Базе, к которой ходят только соседи, -p не нужен вовсе. Публикуют порт у входного контейнера — например, у веб-сервера, к которому приходят пользователи.
localhost в контейнере — сам контейнер: nc localhost 5432 из app подключается к app, где порт 5432 никто не слушает.
| Откуда подключение | Адрес |
|---|---|
| с хоста | localhost:15432 — опубликованный порт |
| из контейнера той же сети | db:5432 — имя и порт программы |
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в контейнере ведёт в сам контейнер.