Введение
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!