Linux

Docker-сети: настройка bridge-сетей и маппинг портов

В этой статье вы узнаете, как создать и настроить Docker-сети, подключить к ним контейнеры и выполнить маппинг портов хоста. После выполнения инструкции ваши контейнеры будут правильно взаимодействовать друг с другом и с внешним миром.

Обновлено 20 июля 2026 г.
5-10 мин
Средняя
FixPedia Team
Применимо к:Docker 20.10+Ubuntu 22.04Linux Kernel 5.15+

Введение

Docker-сети позволяют изолированно запускать контейнеры и обмениваться между ними данными. Правильно настроенная bridge-сеть обеспечивает необходимую изоляцию и возможность доступа к внешним сервисам. После выполнения этой инструкции вы сможете создавать bridge-сети, подключать к ним контейнеры и выполнять маппинг портов хоста, чтобы сделать приложения внутри контейнеров доступными извне.

Требования

  • Docker версии 20.10 или выше, установленный и запущенный (docker --version).
  • Доступ с правами суперпользователя (sudo), если Docker работает через Docker Group.
  • Linux-ядро, поддерживающее iptables и VLAN (стандартные дистрибутивы удовлетворяют этому требованию).
  • Базовый образ, например nginx, для тестирования (или любой другой контейнер).

Пошаговая инструкция

Шаг 1: Создание bridge-сети

docker network create --driver bridge mynetwork

Команда создаёт сеть с драйвером bridge. Имя mynetwork будет использоваться для подключения контейнеров.

Шаг 2: Запуск контейнера в новой сети

docker run -d --network mynetwork --name webcontainer nginx

Контейнер webcontainer присоединяется к сети mynetwork и получает автоматический IP-адрес из подсети сети.

⚠️ Важно: Если вам нужны статические IP-адреса, используйте --ip при создании сети: docker network create --driver bridge --subnet 172.20.0.0/16 mynetwork.

Шаг 3: Маппинг портов хоста к контейнеру

Экспортируйте порт хоста в контейнер:

docker run -d -p 8080:80 --network mynetwork --name webcontainer2 nginx

Теперь сервис в контейнере слушается на порту 80, а доступ к нему с хоста осуществляется через http://localhost:8080.

Шаг 4: Проверка подключения

Проверьте connectivity внутри контейнера:

docker exec webcontainer curl -s http://localhost

На хосте убедитесь, что маппинг работает:

curl -s http://localhost:8080

Если ответ содержит HTML-разметку Nginx, маппинг портов настроен корректно.

Проверка результата

  • docker network ls — список всех сетей Docker.
  • docker network inspect mynetwork — подробная информация о подсети, IP-адресах и драйвере.
  • docker ps — отображает подключённые сети для каждого контейнера.

Возможные проблемы

  • Error response from daemon: address already in use – bridge-сеть с таким именем уже существует. Удалите её перед повторным созданием: docker network rm mynetwork.
  • Контейнер не может подключиться к сети – проверьте DNS в контейнере: docker exec webcontainer cat /etc/resolv.conf. Убедитесь, что --dns не переопределяет DNS-сервер.
  • Порт хоста занят – укажите другой свободный порт или остановите процесс, использующий порт: lsof -i :8080.
  • Контейнер не видит хост – bridge-сети Docker изолируют контейнеры по умолчанию. Для доступа к хосту используйте --network bridge и маппинг портов, либо добавьте специальный алиас в /etc/hosts.

Следуйте этим шагам, и ваши Docker-контейнеры будут корректно взаимодействовать друг с другом и с внешним миром. Удачного использования Docker!

Часто задаваемые вопросы

Как создать bridge-сеть в Docker?
Как подключить контейнер к существующей bridge-сети?
Что делать, если маппинг портов не работает?
Как проверить настройки сети Docker?

Полезное

Создание bridge-сети
Запуск контейнера в новой сети
Маппинг портов хоста к контейнеру
Проверка подключения