В нашей команде мы сейчас переходим на 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.
Буду очень признателен за любую помощь!


Это звучит в точности как Эта проблема.
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
К сожалению, это не решает проблему ... когда я использую этот код в скрипте, он застревает в бесконечном цикле, поскольку (по крайней мере) одна сеть удалена из никогда.
Что ж ... здесь - это та же проблема, все еще не решенная. Они также предложили перезапустить демон, вы делали это перед тестированием скрипта?
Также в нем говорится, что для фактического удаления сети требуется время, можете ли вы попробовать запустить его на пару минут?
Да, как указано в моем вопросе, перезапуск демона - это мое "жесткое исправление", но это действительно кажется странным.
Он работал около 10 минут и не завершился. Когда я запускаю docker network ls, одна из сетей все еще видна спустя более 30 минут после удаления стека. Но я думаю, что на данный момент нет решения проблемы (исходя из проблем, которые вы связали).
Вы всегда можете использовать docker system prune -a, чтобы избавиться от старой сети. Это не приведет к удалению ваших томов.
В следующий раз на docker-compose up --build -d потребуется больше времени, но это решит вашу текущую проблему.
docker system prune -a удалит все ваши существующие образы и контейнеры. НЕ ИСПОЛЬЗУЙ!
Верно. Не уверен, для чего полезен дополнительный -a, потому что он делает то же самое и без него.
Если вы пытаетесь добавить контейнер в существующую сеть, которая больше не существует, вы можете использовать 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
кто нибудь тестировал?
Это должен быть принятый ответ. Я автоматизировал это решение и запускаю его каждый раз, когда у меня появляется сеть-призрак. Работает очень хорошо.
чтобы получить этот ответ, я потратил почти 4 часа на то, чтобы выяснить, почему это произойдет и как это решить.
Я не смог избавиться от сетей ни одним из методов в предыдущих ответах.
Это то, что у меня сработало.
systemctl restart docker
Вы проверяли, все ли контейнеры, использующие эту сеть, не работают? стек rm выдает команду на немедленное удаление всех служб, но на создание самих контейнеров уходит немного времени. Также есть ли в сети какие-нибудь конфигурации? IPAM, конкретные драйвера?