Не удается подключить контейнер Docker к пользовательской мостовой сети.

Вопрос или проблема

Я пытаюсь подключить контейнер Docker к нескольким сетям моста, что работало годами, но больше не работает, предположительно после того, как я применил последние обновления (используя Debian testing).

Выполнение команды docker network connect возвращает ошибку, так как это, по-видимому, конфликтует с существующим маршрутом в форме {Ifindex: 5 Dst: 0.0.0.0/0 Src: <nil> Gw: 172.17.0.1 Flags: [] Table: 254 Realm: 0}.

Шаги воспроизведения

Создайте новый контейнер, подключенный к сети по умолчанию:

# docker run --rm -it --network=bridge --name=my-container debian:testing-slim

Создайте вторую сеть моста и попробуйте подключить к ней контейнер:

# docker network create my-net
# docker network connect my-net my-container
Error response from daemon: failed to add interface veth487637c to sandbox: error setting interface "veth487637c" IP to 172.18.0.2/16: cannot program address 172.18.0.2/16 in sandbox interface because it conflicts with existing route {Ifindex: 5 Dst: 0.0.0.0/0 Src: <nil> Gw: 172.17.0.1 Flags: [] Table: 254 Realm: 0}

Указанный адрес шлюза в существующем маршруте находится в подсети 172.17.0.0/16 сети по умолчанию, в то время как новый адрес 172.18.0.2/16 находится в пользовательской сети моста, поэтому я не понимаю, почему возникает конфликт в первую очередь.

# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
bd87d73eabe7   bridge    bridge    local
a2d9388b4d06   host      host      local
3b46a388c9c1   my-net    bridge    local
142d1733427c   none      null      local
$ ip route
default via 192.168.1.1 dev wlp61s0 proto dhcp src 192.168.1.21 metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.18.0.0/16 dev br-3b46a388c9c1 proto kernel scope link src 172.18.0.1 linkdown 
192.168.1.0/24 dev wlp61s0 proto kernel scope link src 192.168.1.21 metric 600 

Ответ или решение

Подключение Docker-контейнера к нескольким мостовым сетям может столкнуться с рядом проблем, особенно если обновления системы или Docker изменили их поведение. Рассмотрим шаги по решению проблемы подключения Docker-контейнера к пользовательской мостовой сети, используя описание ошибки и конфликта маршрутов, представленных в вашем вопросе.

F: Факты

  1. Природа проблемы: Возникает ошибка при попытке подключения контейнера к новой мостовой сети, хотя это ранее работало.
  2. Текст ошибки:
    Error response from daemon: failed to add interface veth487637c to sandbox: error setting interface "veth487637c" IP to 172.18.0.2/16: cannot program address 172.18.0.2/16 in sandbox interface because it conflicts with existing route {Ifindex: 5 Dst: 0.0.0.0/0 Src: nil Gw: 172.17.0.1 Flags: [] Table: 254 Realm: 0}
  3. Вывод команд: Команды docker network ls и ip route указывают на существование сетей 172.17.0.0/16 и 172.18.0.0/16 без заметных конфликтов IP-адресаций.

O: Возможности

  • Обновления Docker или ядра: Возможны изменения в правилах маршрутизации внутри Docker или ядра ОС после обновления.
  • Конфигурация сети: Сетевые конфигурации ОС могли измениться, вызывая конфликты при попытке программирования IP-адресов.

R: Рекомендации

  • Проверка обновлений:

    • Проверьте, не изменились ли настройки маршрутизации в последних версиях Docker или системы.
    • Обратитесь к документации или журналам изменений для выявления возможных изменений поведения.
  • Проверка конфликтов IP:

    • Убедитесь, что Docker не конфликтует с системными IP-адресами.
    • Используйте команду docker inspect my-net для анализа текущих IP-адресов и сравните с системным маршрутизацией через ip route.
  • Очистка маршрутизации:

    • Попробуйте отключить и снова подключить сети, или пересоздать пользовательскую сеть, чтобы устранить возможные ошибки конфигурации.
    • Используйте команду docker network prune для очистки неиспользуемых сетей.

E: Экспертиза

  • Измените интерфейсные конфигурации:

    • Это может быть случай, когда маршрутизатор контейнера veth неправильно связывается. Проведите диагностику сетевого интерфейса с помощью ip link.
  • Следите за логами Docker:

    • Проверьте логи Docker daemon с помощью journalctl -u docker.service, чтобы получить больше информации о проблеме.

S: Стратегии

Если ни одна из предоставленных рекомендаций не решает проблему, можно попробовать другие способы, например, откатить последние обновления системы или Docker, чтобы вернуть известную рабочую конфигурацию. Также рекомендуется следить за обсуждениями на форумах Docker и отчетами об ошибках для получения более целенаправленных решений.

Такое комплексное рассмотрение проблемы гарантирует, что вы сможете идентифицировать и устранить источник конфликта при подключении контейнера к пользовательской сетевой мостовой конфигурации в Docker.

Оцените материал
Добавить комментарий

Капча загружается...