Docker inaccessible après le sumil de l’ordinateur

Je viens d’installer docker en utilisant docker-toolbox 1.8.2 sur Windows 10.

En raison de ce problème, j’ai dû recréer l’image du docker en utilisant ces commandes

docker-machine rm default docker-machine --native-ssh create -d virtualbox default 

Après cela, ça marche très bien, sauf pour un problème:

Lorsque le PC est en veille et se réveille à nouveau, les commandes du menu fixe ne peuvent plus se connecter. Exemple:

 > docker images An error occurred trying to connect: Get https://192.168.99.100:2376/v1.20/images/json: dial tcp 192.168.99.100:2376: ConnectEx tcp: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 

Cependant, le docker-machine répertorie la machine en cours d’exécution:

 > docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default * virtualbox Running tcp://192.168.99.100:2376 

Je peux également confirmer dans VirtualBox que l’écran de la VM semble être actif.

J’ai essayé de démarrer et d’arrêter la machine, mais cela n’aide pas

 C:\x> docker-machine stop default C:\x> docker-machine start default Starting VM... Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command. C:\x> docker-machine env default --shell=powershell 

Ironiquement, la dernière commande se bloque, donc je ne reçois jamais de parameters d’environnement.

La seule chose qui aide est de redémarrer l’ensemble du PC. Mais cela devrait être inutile?

J’ai également posté cela comme un problème sur le repository github docker , mais celui-ci était fermé. Un problème apparent semble être celui-ci , mais aucune solution de contournement ou solution n’a été publiée pour Windows.

Après avoir combattu avec VirtualBox + Docker Toolbox, j’ai enfin trouvé le moyen de faire fonctionner Docker à nouveau (même sans redémarrer tous les conteneurs):

  1. Réveille le PC du sumil
  2. Essayez les docker images (ça ne marchera pas)
  3. Ouvrez VirtualBox -> Fermez la VM avec l’état de sauvegarde (CTRL + V)
  4. Réexécutez votre machine virtuelle
  5. Essayez à nouveau les docker images (maintenant devrait fonctionner)

S’il vous plaît noter: Toutes les étapes sont dans VirtualBox seulement! L’exécution docker-machine restart default créera un autre adaptateur réservé à l’hôte, ce que vous ne voulez pas. Si vous l’avez fait de toute façon, supprimez tous les adaptateurs créés en plus (Fichier-> Préférences-> Réseau sur VirtualBox), puis suivez les étapes 1 à 5.

J’ai ressenti exactement les mêmes symptômes sur Windows 8.1 … Le problème est que ce n’est pas vraiment un problème spécifique au docker, mais plutôt la manière dont Windows gère les cartes réseau VirtualBox après le sumil (je pense …). Le coupable dans mon cas est que les adresses de la carte réseau devenaient privées après le sumil (elles sont devenues des adresses 169. *).

Crédits à ce gars qui m’a donné l’idée: http://lyngtinh.blogspot.ca/2011/12/how-to-disable-autoconfiguration-ipv4.html

Réparer:

  1. Démarrer une invite de commande en tant qu’administrateur
  2. Découvrez les cartes réseau “utiles”: ipconfig /all . Les plus utiles dans mon cas étaient ceux étiquetés “VirtualBox Host-Only Ethernet Adapter” qui n’avaient pas d’ips privés (ne commençant pas par 169. *).
  3. Exécutez cette commande et notez le “Idx” des adaptateurs réseau VirtualBox utiles: netsh interface ipv4 show inter .
  4. Exécutez cette commande pour désactiver la configuration automatique IP: netsh interface ipv4 set interface dadtransmits=0 store=persistent . Remplacez par chaque index trouvé à l’étape précédente.
  5. Redémarrer Windows

Après, j’ai pu docker-machine start default , puis docker-machine env default --shell cmd , mettre le PC en veille, se réveiller et lancer docker-machine env default --shell cmd .

J’ai trouvé que le fait de supprimer l’adaptateur hôte uniquement (Fichier-> Préférences-> Réseau sur VirtualBox) et de redémarrer le Docker-Machine aide.

Pas une vraie solution. Mais probablement mieux que de redémarrer l’ordinateur.

Ayant essayé toutes les autres réponses ici, et ayant un succès variable mais non cohérent, ce qui suit semble le ramener de manière fiable après ce problème.

Ouvrez une fenêtre powershell / command (j’ai le plus de succès si je lance toutes les commandes docker-machine dans une fenêtre PowerShell ouverte en tant qu’administrateur, je ne sais pas si cela est important ou pas) puis lancez (où “dev” est le nom de votre instance de machine docker):

 docker-machine ssh dev 

Ensuite, sur le terminal ouvert, exécutez:

 sudo shutdown -r now 

Lorsque la machine redémarre, elle semble rafraîchir le réseau et fonctionner correctement. Notez, cependant, que le simple fait d’exécuter docker-machine restart dev n’a pas eu le même effet pour moi.

Votre machine doit être en cours d’exécution avant de pouvoir exécuter ssh, donc si elle n’est pas en cours d’exécution, exécutez docker-machine start dev avant d’essayer SSH.

A eu le même problème sur Windows 8.1 et docker toolbox 1.12.0 Aucune des solutions ci-dessus n’a fonctionné pour moi aussi.

[édité]

Vous avez trouvé un autre moyen de faire fonctionner Docker après le réveil du système:

  • Dans la fenêtre du terminal de démarrage rapide du docker, arrêtez le processus Docker Ctrl-C (s’il est toujours en cours d’exécution)
  • Exécuter la commande docker-compose down
  • Arrêter le docker avec docker-machine stop default
  • Quitter la fenêtre du terminal Ctrl-D
  • Exécutez à nouveau le terminal de démarrage rapide et effectuez toutes les étapes suivantes dont vous avez besoin.

Cela a fonctionné pour moi, sur la machine hôte Windows.

Configurez votre carte réseau pour

1) Autoriser la carte réseau à réveiller l’ordinateur,

2) Autoriser un paquet magique à réveiller l’ordinateur,

3) Autoriser IPV6

http://www.worldstart.com/dropped-internet-connection-in-sleep-mode/

En outre, sur les parameters de réseau de boîtes virtuelles, accédez à avancé et autorisez le mode promiscuité aux machines VM ou autorisez tous les