Понимание сети и адресации IP в Docker Compose
Docker Compose — мощный инструмент для определения и запуска многоконтейнерных приложений. При работе с Docker Compose крайне важно понимать механизмы сети и адресации IP для обеспечения корректного взаимодействия ваших приложений.
Обзор сети Docker Compose
Docker Compose создаёт по умолчанию сеть для вашего приложения, позволяя контейнерам взаимодействовать друг с другом с помощью имён сервисов. Эта сеть по умолчанию — мостовая сеть (bridge network), что означает, что контейнеры могут обращаться друг к другу, используя назначенные им IP-адреса.
graph LR
subgraph Docker Compose Network
container1[Контейнер 1] -- Взаимодействие через IP --> container2[Контейнер 2]
container2 -- Взаимодействие через IP --> container3[Контейнер 3]
end
Назначение IP-адресов в Docker Compose
По умолчанию Docker Compose назначает контейнерам IP-адреса из предопределённой подсети. Конкретная используемая подсеть зависит от драйвера сети Docker и конфигурации вашей Docker-среды.
Для стандартной мостовой сети Docker Compose обычно назначает IP-адреса из подсети 172.16.0.0/16. Вы можете просмотреть назначенные IP-адреса для ваших контейнеров, используя команду docker network inspect.
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "...",
"Created": "...",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.16.0.0/16",
"Gateway": "172.16.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"...": {
"Name": "container1",
"EndpointID": "...",
"MacAddress": "...",
"IPv4Address": "172.16.0.2/16",
"IPv6Address": ""
},
"...": {
"Name": "container2",
"EndpointID": "...",
"MacAddress": "...",
"IPv4Address": "172.16.0.3/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
В приведённом примере контейнерам container1 и container2 назначены IP-адреса 172.16.0.2/16 и 172.16.0.3/16 соответственно в подсети 172.16.0.0/16.
Понимание механизмов сети и адресации IP в Docker Compose имеет решающее значение для устранения проблем, связанных с сетью, и настройки конфигурации сети вашего приложения.