Docker Network не найдена
В нашей команде мы в настоящее время переходим на Docker для развертывания всего на нашем сервере.
Мы используем Docker Swarm и несколько (10+) составляем файлы, определяющие множество (20+) сервисов. Пока что все работает прекрасно, кроме случаев, когда мы снимаем наш стек с помощью docker stack rm <name>
(и повторно docker stack deploy <options> <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
сетями, которые создаются с помощью файлов компоновки, используемых для развертывания нашего стека. В настоящее время у нас есть только один узел в нашем Swarm.
Наш текущий "обходной путь" - перезапустить Docker (который решает проблему), но это не является жизнеспособным решением в производственной среде. Оставить рой и присоединиться к нему снова не решит проблему.
Сначала мы думали, что эта проблема связана только с Docker для Mac (поскольку мы впервые столкнулись с проблемой на локальных машинах), однако та же проблема возникает в Debian Stretch. В обоих случаях мы используем последний доступный дистрибутив Docker.
Буду очень признателен за любую помощь!
Ответы
Ответ 1
Вы всегда можете использовать docker system prune -a
чтобы избавиться от старой сети. Это не удалит ваши тома.
В следующий раз потребуется больше времени для docker-compose up --build -d
, но это поможет вам docker-compose up --build -d
вашей текущей проблемой.
Ответ 2
Это звучит так же, как этот вопрос.
Использование стека rm после "слишком быстрого" развертывания стека приведет к созданию/удалению сетей, возможно других ресурсов стека.
На сегодня проблема все еще остается открытой (docker/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
Ответ 3
Если вы пытаетесь добавить контейнер в существующую сеть, которая больше не существует, вы можете использовать docker-compose up --force-recreate
. Я нашел этот комментарий по вопросам GitHub полезным обзором.
Ответ 4
старые контейнеры все еще используют старую сеть. Возможно, вы удалили сети, но забыли старые контейнеры. Просто удалите старые контейнеры, создайте свою сеть и создайте заново.