web-dev-qa-db-fra.com

Réseau Docker introuvable

Dans notre équipe, nous sommes en train de passer à Docker pour tout déployer sur notre serveur.

Nous utilisons Docker Swarm et plusieurs (10+) fichiers de composition définissant de nombreux services (20+). Tout fonctionne à merveille jusqu'à présent, sauf lorsque nous extirpons notre pile en utilisant docker stack rm <name> (et en redéployons en utilisant docker stack deploy <options> <name>): environ toutes les secondes, nous obtenons l'erreur suivante:

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

Lorsque vous utilisez docker network ls, le réseau n'est effectivement pas supprimé. Cependant, docker network rm <id> génère toujours les éléments suivants:

Error response from daemon: network <id> not found

Ce qui rend cela encore plus étrange est le fait que docker network inspect <id> renvoie une sortie normale. Les réseaux sont toujours des réseaux overlay qui sont créés avec les fichiers de composition utilisés pour déployer notre pile. Actuellement, nous n'avons qu'un seul nœud dans notre Swarm.

Notre solution actuelle consiste à redémarrer Docker (ce qui résout le problème), mais ce n'est pas une solution viable dans un environnement de production. Quitter l'essaim et le rejoindre à nouveau ne résout pas le problème non plus.

Au début, nous pensions que ce problème ne concernait que Docker pour Mac (comme nous l'avions d'abord rencontré sur des machines locales), mais le même problème se pose sous Debian Stretch. Dans les deux cas, nous utilisons la dernière distribution Docker disponible.

J'apprécierais vraiment toute aide!

15
borchero

Cela ressemble exactement à ce numéro .

Stack rm suivi "trop ​​vite" par le déploiement de la pile se heurterait à la création/suppression de réseaux, éventuellement d'autres ressources de la pile.

La question est toujours ouverte à compter d’aujourd’hui ( docker/cli ), mais vous pouvez essayer la solution de contournement suggérée:

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
1
Julio Daniel Reyes

Vous pouvez toujours utiliser docker system Prune -a pour vous débarrasser de l'ancien réseau. Cela ne supprimera pas vos volumes.
Cela prendra plus de temps pour docker-compose up --build -d la prochaine fois, mais cela vous permettra de surmonter votre problème actuel.

0
fcnorman