#Как проявляется проблема и где искать причину
После обновления Docker нарушаться может не сам драйвер bridge, а привязка контейнеров к сети, DNS имён на пользовательском мосту, конфликт подсетей с VPN либо правила брандмауэра.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сеть не таКонтейнер переподключён к default bridge вместо пользовательской сети | docker network inspect показывает неожиданную сеть | Вернуть правильную сеть через Compose |
| Перекрытие маршрутаПодсеть Docker конфликтует с маршрутом организации/VPN | Проблема появилась после смены VPN | Согласовать адресное пространство с администратором |
#Пошаговая диагностика и устранение
- 1. Уточните, какая сеть должна использоватьсяНа сервере Docker посмотрите все сети и найдите сеть проекта. Не путайте встроенную bridge с пользовательской сетью <проект>_default.Linux · Терминал (Bash)КомандаТерминал с правами Docker; чтение.
docker network ls
- 2. Посмотрите подключения контейнераЗамените ИМЯ и сравните поле Networks с ожидаемым. Если сети нет, проверьте исходный Compose и то, как сервис запускался.
- Показывает сети, адреса и шлюзы контейнераLinux · Терминал (Bash)КомандаПоказывает сети, адреса и шлюзы контейнера.
docker inspect --format "{{json .NetworkSettings.Networks}}" ИМЯ
- 3. Изучите параметры конкретного мостаВыберите имя из списка и проверьте драйвер, подсеть, шлюз, список подключённых контейнеров. Если это default bridge, имена соседних контейнеров обычно не разрешаются автоматически.
- Чтение; не запускайте network rmLinux · Терминал (Bash)КомандаЧтение; не запускайте network rm.
docker network inspect ИМЯ_СЕТИ
- 4. Проверьте DNS по имени сервисаНа пользовательской сети приложение должно обращаться к другому сервису по имени сервиса Compose. В контейнере, где есть getent, выполните getent hosts db (вместо db — сервис). При отсутствии getent используйте диагностический образ в тестовой сети.
- Для Linux-образов с getent; наличие IP не доказывает доступность портаLinux · Терминал (Bash)КомандаДля Linux-образов с getent; наличие IP не доказывает доступность порта.
docker exec ИМЯ_ПРИЛОЖЕНИЯ getent hosts db
- 5. Сверьте адреса с VPN и маршрутизациейНа Linux-хосте выполните ip route, сопоставьте сеть Docker с офисной и VPN-подсетью. При перекрытии не меняйте текущую сеть: подготовьте новый диапазон и план перемещения контейнеров с сохранением данных.
- Linux, чтение; на Windows используйте Get-NetRouteLinux · Терминал (Bash)КомандаLinux, чтение; на Windows используйте Get-NetRoute.
ip route
- 6. Исправляйте только в тестовом окруженииЕсли проблема в имени сети/неверном подключении, исправьте networks в compose.yaml и примените к тестовой копии. При конфликте подсетей согласуйте новое адресное пространство и время перезапуска, не подключайте рабочий контейнер к случайному мосту.
- 7. Проверьте связь и доступность приложенияПосле тестового запуска снова проверьте network inspect и обращение по сервисному имени. Убедитесь, что контейнер видит базу и что публично открыты только необходимые порты. Если проблема сохраняется, изучите журнал демона и сетевые правила вместе с администратором.
#Как проверить результат
Контейнер находится в ожидаемой пользовательской сети, имена сервисов разрешаются, приложения обмениваются данными без изменения правил безопасности.
#Если исправление не помогло
Если ошибка зависит от VPN/брандмауэра, сохраните схему подсетей и журнал Docker; не меняйте настройки защитной сетевой политики без согласования.