Сеть Docker не найдена

В нашей команде мы сейчас переходим на Docker, чтобы развернуть все на нашем сервере.

Мы используем Docker Swarm и несколько (10+) файлов компоновки, определяющих множество (20+) сервисов. Пока все работает прекрасно, за исключением случая, когда мы снимаем наш стек с помощью docker stack rm <name> (и повторно развертываем с помощью docker stack deploy <options> <name>): примерно каждый второй раз мы получаем следующую ошибку:

Failed to remove network <id>: Error response from daemon: network <id> not foundFailed to remove some resources from stack: <name>

При использовании docker network ls сеть действительно не удаляется, однако docker network rm <id> всегда приводит к следующему:

Error response from daemon: network <id> not found

Что делает это еще более странным, так это то, что docker network inspect <id> возвращает нормальный результат. Сети всегда являются сетями overlay, которые создаются с помощью файлов compose, используемых для развертывания нашего стека. В настоящее время в нашем Swarm есть только один узел.

Наш текущий «обходной путь» - перезапустить Docker (что решает проблему), но это не жизнеспособное решение в производственной среде. Выход из роя и повторное присоединение к нему тоже не решает проблему.

Сначала мы думали, что эта проблема связана только с Docker для Mac (поскольку мы впервые столкнулись с проблемой на локальных машинах), однако такая же проблема возникает и в Debian Stretch. В обоих случаях мы используем последнюю доступную версию Docker.

Буду очень признателен за любую помощь!

Вы проверяли, все ли контейнеры, использующие эту сеть, не работают? стек rm выдает команду на немедленное удаление всех служб, но на создание самих контейнеров уходит немного времени. Также есть ли в сети какие-нибудь конфигурации? IPAM, конкретные драйвера?

nadavbrkt 24.11.2018 17:57
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
60
1
57 780
7

Ответы 7

Это звучит в точности как Эта проблема.

Stack rm, за которым следует «слишком быстро» развертывание стека, будет гоняться за создание / удаление сетей, возможно, других ресурсов стека.

На сегодняшний день проблема все еще открыта (докер / cli), но вы можете попробовать предложенный обходной путь:

until [ -z "$(docker service ls --filter label=com.docker.stack.namespace=$COMPOSE_PROJECT_NAME -q)" ] || [ "$limit" -lt 0 ]; do
  sleep 1;
done

until [ -z "$(docker network ls --filter label=com.docker.stack.namespace=$COMPOSE_PROJECT_NAME -q)" ] || [ "$limit" -lt 0 ]; do
  sleep 1;
done

К сожалению, это не решает проблему ... когда я использую этот код в скрипте, он застревает в бесконечном цикле, поскольку (по крайней мере) одна сеть удалена из никогда.

borchero 21.11.2018 21:08

Что ж ... здесь - это та же проблема, все еще не решенная. Они также предложили перезапустить демон, вы делали это перед тестированием скрипта?

Julio Daniel Reyes 21.11.2018 21:37

Также в нем говорится, что для фактического удаления сети требуется время, можете ли вы попробовать запустить его на пару минут?

Julio Daniel Reyes 21.11.2018 21:39

Да, как указано в моем вопросе, перезапуск демона - это мое "жесткое исправление", но это действительно кажется странным.

borchero 21.11.2018 21:40

Он работал около 10 минут и не завершился. Когда я запускаю docker network ls, одна из сетей все еще видна спустя более 30 минут после удаления стека. Но я думаю, что на данный момент нет решения проблемы (исходя из проблем, которые вы связали).

borchero 21.11.2018 21:41

Вы всегда можете использовать docker system prune -a, чтобы избавиться от старой сети. Это не приведет к удалению ваших томов. В следующий раз на docker-compose up --build -d потребуется больше времени, но это решит вашу текущую проблему.

docker system prune -a удалит все ваши существующие образы и контейнеры. НЕ ИСПОЛЬЗУЙ!
fnagel 26.11.2020 15:27

Верно. Не уверен, для чего полезен дополнительный -a, потому что он делает то же самое и без него.

bomben 02.12.2020 14:04

Если вы пытаетесь добавить контейнер в существующую сеть, которая больше не существует, вы можете использовать docker-compose up --force-recreate. Я нашел этот Комментарий к проблеме GitHub полезным обзором.

старые контейнеры все еще используют старую сеть. Возможно, вы удалили сети, но забыли rm старые контейнеры. Просто удалите старые контейнеры, создайте свою сеть и создайте заново.

После использования команды docker prune мне не удалось запустить контейнер докера в сети.

Заявлены следующие ошибки:

ERROR: for jekyll-serve Cannot start service jekyll-serve: network b52287167caf352c7a03c4e924aaf7d78e2bc372c703560c003acc758c013432 not found ERROR: Encountered errors while bring up the project.

docker system prune позволил мне снова начать использовать docker-compose up.

Подробнее здесь: https://docs.docker.com/config/pruning/

Удаление "сеть не найдена" в докере

Осмотрите сеть, которую мы не можем удалить

docker network inspect <id> or <name>

Отключите сеть

docker network disconnect -f <networkID> <endpointName> or <endpointId>

Удалить неиспользуемые сети

docker network prune

кто нибудь тестировал?

mik3fly-4steri5k 18.03.2021 13:53

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

mik3fly-4steri5k 18.03.2021 14:14

чтобы получить этот ответ, я потратил почти 4 часа на то, чтобы выяснить, почему это произойдет и как это решить.

Jinna Balu 18.03.2021 17:40

Я не смог избавиться от сетей ни одним из методов в предыдущих ответах.

Это то, что у меня сработало.

systemctl restart docker

Другие вопросы по теме