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

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