
Узнайте, как использовать базовые и расширенные сетевые инструменты для управления контейнерами Docker. Функция создания сетей позволяет пользователям определять собственные сети и подключать к ним контейнеры.
Вы можете создать сеть на одном хосте или сеть, охватывающую несколько хостов, используя функцию сети Docker. В этой статье мы рассмотрим сетевое взаимодействие контейнеров Docker на одном хосте. Информацию и инструкции по объединению контейнеров Docker в сеть на нескольких хостах можно найти в нашей статье на эту тему.
- Требования
- Безопасная работа с Docker без использования Sudo
- Сети Docker по умолчанию
- Сетевое взаимодействие Docker: Bridge vs Overlay
- Инспектирование сети
- Создание новой мостовой сети
- Запуск контейнера и добавление его в сеть
- Добавление запущенного контейнера в сеть
- Отключение контейнера от сети
- Удаление сети
- Пример: Пинг между двумя контейнерами в одной сети
Требования
- Облачный сервер IONOS Linux
- Docker установлен и запущен в вашей системе.
Безопасная работа с Docker без использования Sudo
Демон Docker запускается от имени root, что означает, что пользователям придется использовать sudo для выполнения команд Docker.
Чтобы избежать необходимости использовать sudo для каждой команды Docker, просто добавьте своего пользователя (пользователей) в группу docker с помощью команды:
usermod -aG docker [username]
Например, добавив пользователя jdoe в группу Docker, этому пользователю больше не придется использовать sudo для каждой команды Docker. Чтобы добавить пользователя в группу, используйте команду:
usermod -aG docker jdoe
Сети Docker по умолчанию
Каждая установка Docker автоматически создает три сети по умолчанию. Вы можете перечислить эти сети с помощью команды:
sudo docker network ls
Вывод этой команды будет выглядеть следующим образом:

Сеть bridge — это сеть по умолчанию. Если не указано иное, bridge — это сеть, в которой Docker будет запускать любой новый контейнер.
Сетевое взаимодействие Docker: Bridge vs Overlay
Docker изначально поддерживает два типа сетей: bridge и overlay.
- Мостовая сеть ограничена одним хостом (сервером).
- Оверлейная сеть может охватывать несколько хостов (серверов).
Поскольку оверлейные сети более сложны, мы рассмотрим их в другой статье.
Инспектирование сети
При осмотре сети Docker будет получена информация об этой сети, включая информацию о том, какие контейнеры подключены к сети, и их IP-адреса. Это ценный инструмент тестирования, а также простой способ найти IP-адрес вашего контейнера.
Вы можете проверить сеть с помощью этой команды:
sudo docker network inspect [network name]
Например, чтобы проверить сеть bridge, нужно выполнить следующую команду:
sudo docker network inspect bridge
Вывод этой команды будет выглядеть примерно так:

Как вы можете видеть на скриншоте выше, в этой bridge-сети запущен только один контейнер. Имя контейнера — test_centos_container, а назначенный ему IP-адрес — 172.17.0.3.
Контейнеры могут взаимодействовать друг с другом, только если они работают в одной сети. Например, если у вас есть веб-приложение в одном контейнере, которому нужно подключиться к базе данных в другом контейнере, оба контейнера должны находиться в одной сети.
Создание новой мостовой сети
Чтобы создать собственную сеть, выполните следующую команду:
sudo docker network create -d [driver] [new network name]
Флаг -d позволяет указать драйвер для сети. Для мостовой сети используйте драйвер моста.
Например, чтобы создать мостовую сеть с именем new_test_network, выполните команду:
sudo docker network create -d bridge new_test_network
Вы можете использовать команду sudo docker network ls, чтобы просмотреть список сетей на вашем хосте и убедиться, что ваша сеть была создана.
Запуск контейнера и добавление его в сеть
Если вы не укажете сеть при запуске контейнера, он будет автоматически добавлен в сеть bridge по умолчанию.
Чтобы запустить контейнер и добавить его в определенную сеть, используйте команду :
sudo docker run -it --net=[network name] --name [container name] [image]
Например, чтобы запустить контейнер с именем test_python_container из образа python и добавить его в сеть с именем new_test_network, выполните следующую команду:
sudo docker run -it --net=new_test_network --name test_centos_container centos
Для отсоединения от контейнера используйте CTRL-pCTRL-q.
Вы можете использовать sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер присоединен.
Добавление запущенного контейнера в сеть
Вы можете добавить запущенный контейнер в сеть с помощью команды :
sudo docker network connect [network name] [container name]
Например, чтобы добавить запущенный контейнер с именем test_centos_container в сеть с именем another_test_network, нужно выполнить следующую команду:
sudo docker network connect another_test_network test_centos_container
Вы можете использовать команду sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер подключен.
Docker позволяет добавлять контейнеры к нескольким сетям. Нет необходимости отключать контейнер от одной сети перед тем, как добавить его в другую.
Отключение контейнера от сети
Чтобы отключить контейнер от сети, используйте команду :
sudo docker network disconnect [network name] [container ID or name]
Например, чтобы отключить контейнер с именем test_centos_container от сети new_test_network, нужно выполнить следующую команду:
sudo docker network disconnect new_test_network test_centos_container
Вы можете использовать команду sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер был отключен.
Docker позволяет добавлять контейнеры в несколько сетей. Нет необходимости отключать контейнер от одной сети перед добавлением его в другую.
Удаление сети
Вы не можете удалить сети по умолчанию, которые Docker создает при запуске.
После того как все контейнеры, добавленные в сеть, будут остановлены или отключены, вы можете удалить сеть с помощью команды :
sudo docker network rm [network ID or name]
Например, для удаления сети new_test_network команда будет следующей:
sudo docker network rm new_test_network
Проверить, что сеть была удалена, можно с помощью команды sudo docker network ls.
Пример: Пинг между двумя контейнерами в одной сети
В этом примере мы создадим пользовательскую сеть bridge, запустим два контейнера в этой сети, прикрепим к контейнеру ping_sender и будем пинговать оттуда другой контейнер ping_receiver.
В этом примере будет использоваться официальный образ CentOS 7 под названием centos, который вы можете загрузить с сайта Docker с помощью команды :
sudo docker pull centos
Если вы предпочитаете использовать Ubuntu, просто подставьте вместо него образ Ubuntu.
Сначала создайте мостовую сеть с именем ping_test_network с помощью команды:
sudo docker network create -d bridge ping_test_network
Затем запустите контейнер с именем ping_receiver и присоедините его к мостовой сети ping_test_network с помощью команды:
sudo docker run -it --net=ping_test_network --name ping_receiver centos /bin/bash
Используйте CTRL-p CTRL-q для отсоединения от контейнера ping_receiver.
Осмотрите сеть ping_test_network, чтобы получить IP-адрес контейнера ping_receiver с помощью команды:
sudo docker network inspect ping_test_network
Запишите IP-адрес контейнера.

В данном случае IP-адрес 172.19.0.2.
Запустите контейнер с именем ping_sender и присоедините его к мосту ping_test_network командой:
sudo docker run -it --net=ping_test_network --name ping_sender centos bin/bash
После присоединения к контейнеру и получения командной строки выполните команду ping для другого контейнера:
ping [IP address of ping_receiver]
В данном случае мы будем пинговать IP-адрес 172.19.0.2. Результаты успешного пинга будут выглядеть примерно так:

Завершите ping с помощью CTRL-c, затем используйте CTRL-pCTRL-q для выхода из контейнера.
- Конфигурация