Docker Network - uniqcle/DevOps GitHub Wiki

ip a # посмотреть сетевые интерфейсы и IP адреса им присвоенные
docker network ls                                # типы сетей в docker

Тип сети Bridge --driver bridge

тип сети по умолч. 172.17.0.1/16 Контейнеры имеют доступ наружу. Возможно сетевое взаимодействие между контейнерами по ip-адресам (только если сеть по-умолч.), если своя сеть создана то по DNS именам (--name -NAME)

docker network create --driver bridge MyName      # создали сеть
docker run --net MyName nginx                     # запустили контейнер в сети

Тип сети Host --drive host

когда контейнеры создаются, они получают ip адрес хоста. Соответственно, чтобы подключиться, нужно просто указать ip адрес хоста и порт. Сетевое устройство хоста переносится в контейнер. Не может быть больше одной сети с типом host.

docker run nginx --network=host        # запуск образа с типом сети host

Тип сети None --driver null

Никак не подключается к контейнеру извне. Нет IP. Не сможет подключиться и локально. Но можем зайти на него и запустить к-л программы. Не может быть больше одной сети с типом null.

docker network create --driver null TestHost # Error response from daemon: only one instance of "null" network 
docker run nginx --network=none        # запуск образа с типом сети none
Тип сети macvlan и ipvlan
macvlan
Сервер eth0: 172.16.10.2
Докер контейнер 1 eth0: 172.16.10.21
Докер контейнер 2 eth0: 172.16.10.22
mac адреса разные 

ipvlan
Сервер eth0: 172.16.10.3
Докер контейнер 1 eth0: 172.16.10.31
Докер контейнер 2 eth0: 172.16.10.32
mac адреса у всех одинаковые

создаем/просматриваем/удаляем своей сети

docker network create myNet                      # по умолч. создает с драйвером bridge
docker network create --driver host myNetHost    # должен быть только 1 host
docker network create --driver null myNetNull    # должен быть только 1 null
docker network inspect myNet                     # узнать что-то о сети

# создаем свою сеть со своим ip
docker network create -d bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 myNet192

# удаление
docker network rm myNet myNet192

Пример работы с сетью

Создали сеть

docker network create --driver bridge Test3

Просмотр инфо о сети

docker network ls
docker network inspect <Имя сети или ID>

ip адрес сети

"Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]

Создаем свою сеть, со своими ip адресами, где Current имя сети

docker network create -d bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 Current

Создаем контейнеры в сети по дефолту

# ставим утилиту для анализа сетей в сети по дефолту. 
docker run --rm -it --name container1  nicolaka/netshoot /bin/bash
docker run --rm -it --name container2  nicolaka/netshoot /bin/bash

# узнаем ip контейнеров
ip a

# ping по ip друг друга
172.17.0.4

Создаем сеть и контейнеры в этой же сети

docker network create Test
docker run --rm -it --name container1 --net Test nicolaka/netshoot /bin/bash #172.22.0.2
docker run --rm -it --name container2 --net Test nicolaka/netshoot /bin/bash #172.22.0.3
ping container1
ping container2 

Создаем 3й контейнер в другой сети и переносим его в сеть Test

docker run --rm -it --name container3 nicolaka/netshoot /bin/bash  # 172.17.0.2
docker network connect Test container3 # теперь в container3 172.22.0.4

Отключаемся от старой сети container3

docker inspect container3 # Используем "NetworkID": "9fce37... 
docker network disconnect 9fce37...  container3 
⚠️ **GitHub.com Fallback** ⚠️