Вопрос или проблема
На свежей установке ubuntu-server v24.04 и docker-ce v27.4.1, если я запускаю любой контейнер docker с мостовой сетью, это разрывает весь локальный интернет через 2-3 секунды. Я проверил, что моя сеть моста docker0
не управляется. Всё кажется в порядке, если я пингую google.com из docker, показывает 66% потерь пакетов.
docker run -it --rm busybox ping -c3 google.com
PING google.com (216.58.196.110): 56 data bytes
64 bytes from 216.58.196.110: seq=0 ttl=53 time=55.065 ms
--- google.com ping statistics ---
3 packets transmitted, 1 packets received, 66% packet loss
round-trip min/avg/max = 55.065/55.065/55.065 ms
Вывод networkctl
:
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp37s0 ether routable configured
3 docker0 bridge no-carrier unmanaged
ip route
:
default via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100
1.1.1.1 via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100
10.12.0.0/24 dev enp37s0 proto kernel scope link src 10.12.0.10 metric 100
10.12.0.1 dev enp37s0 proto dhcp scope link src 10.12.0.10 metric 100
10.12.0.10 dev enp37s0 proto dhcp scope host src 10.12.0.10 metric 100
172.16.0.0/24 dev docker0 proto kernel scope link src 172.16.0.1 linkdown
iptables
:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Ответ или решение
Причины возникновения проблем с интернетом при использовании Docker Bridge в Ubuntu
В данной статье мы разберем проблему, которая может возникнуть при использовании сети Docker Bridge на свежей установке Ubuntu Server 24.04 с версией Docker CE 27.4.1. Проблема заключается в том, что при запуске любого контейнера, использующего сеть Bridge, происходит сбой всего локального интернет-соединения после 2-3 секунд. Наша цель — понять причины этого поведения и предложить возможные решения.
Анализ текущей конфигурации сети
-
Вывод команды
networkctl
:IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 enp37s0 ether routable configured 3 docker0 bridge no-carrier unmanaged
Здесь видно, что интерфейс
docker0
находится в состоянииno-carrier
, что означает, что он не подключен к физическому каналу. Это может указывать на неправильную конфигурацию или отсутствие взаимодействия с другими сетевыми интерфейсами. -
Маршрутизация (
ip route
):default via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100 10.12.0.0/24 dev enp37s0 proto kernel scope link src 10.12.0.10 metric 100 172.16.0.0/24 dev docker0 proto kernel scope link src 172.16.0.1 linkdown
Мы видим, что основной шлюз находится по адресу
10.12.0.1
, а подсеть172.16.0.0/24
назначена дляdocker0
, но она не доступна (linkdown). Это может объяснять, почему контейнеры не могут корректно взаимодействовать с внешней сетью. -
Файрвол (
iptables
):Chain INPUT (policy ACCEPT) Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT)
Правила iptables находятся в состоянии
ACCEPT
, что указывает на отсутствие блокировки трафика. Однако, возможно, другие конфигурации вашего сетевого окружения могут негативно влиять на работу, особенно если есть перекрытие с другими правилами.
Возможные причины проблемы
-
Конфликт подсетей:
Docker по умолчанию использует подсеть172.16.0.0/16
для виртуальных интерфейсов. Если в вашей локальной сети уже используется та же подсеть, это может привести к конфликтам. Проверьте конфигурацию DHCP вашего маршрутизатора. -
Проблемы с маршрутизацией:
Убедитесь, что маршруты настроены правильно. Возможно, во время запуска контейнеров происходит изменение маршрутов, что приводит к нарушению соединения. Рассмотрите возможность явного указания параметров маршрутизации для контейнеров. -
Режим работы сетевых интерфейсов:
Некоторые версии драйверов и сетевых интерфейсов могут некорректно работать с Docker. Обновите драйвера вашей сетевой карты, а также убедитесь, что Нет никаких настроек, которые могли бы блокировать трафик между интерфейсами.
Рекомендации по устранению проблемы
-
Проверьте настройки DHCP: Убедитесь, что ваша DHCP-конфигурация не конфликтует с подсетью, используемой Docker. Рассмотрите возможность изменения диапазона DHCP для вашей сети.
-
Измените конфигурацию Docker: Вы можете изменить использование Docker, указав другую подсеть для
docker0
, чтобы избежать конфликтов. Это делается через файл конфигурации Docker или параметры конфигурации демона. -
Обновите систему и драйверы: Обновите систему до последней версии, чтобы исправить возможные баги и проблемы с совместимостью. Также проверьте, нет ли обновлений для сетевых драйверов.
-
Мониторинг и тестирование: Используйте простые инструменты мониторинга (например,
ping
,traceroute
) для диагностики проблем после внесения изменений, а также для отслеживания состояния сети и её производительности.
Заключение
Проблема с интернетом при использовании Docker в Ubuntu может быть вызвана множеством факторов, включая конфликты подсетей, неправильную маршрутизацию и проблемы с драйверами. Применение предложенных методов должен помочь исправить ситуацию. Если проблема сохраняется, возможно, стоит обратиться на форумы поддержки Docker или Ubuntu для получения экспертной помощи.