PassFront
  1. PassFront
  2. База знаний
  3. Контейнеры, volumes и сети

Как работают сети в Docker и что делает публикация портов (-p)?

Контейнеры, volumes и сети

Сети Docker определяют, как контейнеры общаются между собой и с внешним миром.

Драйверы

  • bridge (по умолчанию) — виртуальная сеть на хосте, контейнеры в ней видят друг друга. В пользовательской bridge-сети работает разрешение по имени контейнера.
  • host — контейнер использует сеть хоста без изоляции.
  • none — без сети.

Публикация порта

Контейнер доступен снаружи только после проброса порта:

docker run -d -p 8080:80 nginx
# хост:8080 → контейнер:80

Строка EXPOSE в Dockerfile документирует порт, но сама по себе ничего не публикует.

Связь контейнеров

docker network create appnet
docker run -d --network appnet --name db postgres:16
docker run -d --network appnet -e DB_HOST=db myapp    # обращение по имени db

Подвохи

  • Внутри контейнера localhost — это сам контейнер, а не хост и не соседний сервис.
  • Не публикуйте порты базы данных наружу без необходимости.

Коротко для собеседования

Контейнеры в одной пользовательской сети обращаются друг к другу по имени, а снаружи доступны только опубликованные порты -p хост:контейнер.

Другие вопросы раздела