
✎Решение проблемы сети Docker до того, как она станет вашей
Источник: Noted.lol
Большинство людей устанавливают Docker и никогда не задумываются о том, как он управляет сетями. Контейнеры запускаются, соединяются друг с другом, и все, кажется, работает идеально. Но настройки по умолчанию в Docker скрывают тихую проблему, которая со временем может разрушить вашу конфигурацию.
Каждый раз, когда Docker создает сеть, он резервирует большой блок IP-адресов из общего пула. В конце концов, этот пул либо пересекается с вашей домашней сетью, либо полностью исчерпывается, что приводит к появлению dreaded "не удалось найти доступный, не пересекающийся пул IPv4-адресов" ошибки.
Исправление очень простое, но это то, что должен сделать каждый пользователь, размещающий свои сервисы самостоятельно, до того, как это станет проблемой.
Когда Docker использует слишком много пространства
По умолчанию Docker использует диапазон адресов от 172.16.0.0 до 172.31.255.255, который известен как двенадцатый блок. Каждый раз, когда создается новая сеть, Docker занимает большую часть этого пространства, известного как двадцатый подсет. Это означает, что каждая новая сеть получает более четырех тысяч доступных IP-адресов, даже если им нужно всего лишь несколько.
С течением времени, по мере добавления и удаления контейнеров или создания новых стеков, Docker продолжает резервировать эти большие подсети. Как только ему становится недостаточно места в оригинальном диапазоне, он начинает использовать адреса из 192.168.0.0, на которые многие домашние сети уже зависят. Это может привести к конфликтам IP и странным проблемам, которые кажутся возникающими без причины.
Вы можете внезапно потерять доступ к вашему NAS, или ваш маршрутизатор может начать вести себя странно, потому что Docker назначил пересекающийся адрес. Это может быть запутанным и раздражающим, если вы не знаете, что происходит.
Ошибка "Недостаточно сетей"
Если вы когда-либо видели такой ошибку, как
"не удалось найти доступный, не пересекающийся пул IPv4-адресов среди значений по умолчанию для назначения сети"
Это Docker говорит вам, что он полностью исчерпал доступные подсети из своего пула по умолчанию. Он попытался создать новую сеть, но каждый возможный диапазон адресов, который он знает, уже занят или пересекается с чем-то другим.
Эта ошибка распространена, когда Docker продолжает вырезать большие двадцатые подсети из своего двенадцатого блока. В конечном итоге места не остается. Настройка размера пула полностью решает эту проблему.
Простое исправление
Существует простой способ предотвратить все это. Цель состоит в том, чтобы сказать Docker использовать меньшие куски того же диапазона адресов, чтобы он не занимал ненужное пространство. Вместо того чтобы резервировать двадцатую подсеть каждый раз, вы можете изменить это, чтобы использовать двадцать четвертую подсеть. Это изменение означает, что Docker по-прежнему использует тот же двенадцатый диапазон, но он берет только меньшие кусочки с примерно двумястами пятьюдесятью четырьмя доступными адресами на сеть.
Чтобы внести изменения, откройте или создайте файл /etc/docker/daemon.json и добавьте следующую конфигурацию:
{
"log-level": "warn",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
},
"default-address-pools": [
{
"base": "172.16.0.0/12",
"size": 24
}
]
}
Сохраните файл и перезапустите Docker. Затем отключите любые активные стеки Compose и снова запустите их, чтобы их сети были воссозданы с использованием нового размера подсети.
После этого Docker по-прежнему будет использовать тот же двенадцатый блок адресов, но вместо передачи большой двадцатой подсети каждый раз, он теперь будет выделять меньшие и более разумные двадцать четвертые сети.
Это изменение также исправляет ошибку "недостаточно сетей". Перезапустив пул адресов, вы предоставляете Docker новое пространство для создания новых сетей без конфликтов. Если вы уже столкнулись с этой ошибкой, удалите неиспользуемые сети с помощью
docker network prune
затем перезапустите сервис. После этого все снова будет работать нормально.
Заключительные примечания и мысли
Docker мощный, но его настройки по умолчанию никогда не были созданы для небольшого домашнего сервера. Изменение пула адресов один раз убережет вас от этих странных Bugs сети, которые всегда появляются в самое неподходящее время. Это позволяет Docker оставаться в своем собственном направлении и предотвращает неожиданные конфликты в остальной части вашей конфигурации.
Это одно из тех исправлений, которые кажутся незначительными, но имеют большое значение. Вы делаете это однажды, забываете об этом, и все просто работает так, как должно.
Docker Networking Made Simple: What Every Beginner Needs to KnowDocker is amazing until your containers need to talk to each other. Suddenly, terms like bridge, host, and overlay show up, and it feels like learning a foreign language. Don’t worry, it’s simpler than it seems. Why Containers Can’t Just Chat Think of each container as a
NotedJeremy![]()