web-dev-qa-db-fra.com

Exécution de Docker pour Windows, erreur lors de l'exposition des ports

Je suis conscient qu'il y a beaucoup de questions sur l'exécution de Docker sur Windows, mais cette question concerne l'utilisation du tout nouveau Docker pour Windows, sous Windows.
Dans mon cas, j'utilise Windows 10 Pro 64 bits. Selon le site, cette version devrait être supportée.
J'ai suivi un tutoriel que j'ai trouvé ici: https://prakhar.me/docker-curriculum/
J'ai également essayé de suivre le guide officiel bien sûr: https://docs.docker.com/docker-for-windows/

Dans les deux tutoriels, le même message d'erreur s'affiche lorsque j'essaie d'attribuer un port à l'aide du paramètre -P ou lorsque je tente de spécifier un port -p 8080:5000:

Dans le guide officiel, je lance docker run -d -p 80:80 --name webserver nginx et reçois: 

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: réponse d'erreur du démon: échec du pilote de programmation de la connectivité externe sur le serveur Web d'extrémité (f9946544e4c6ad2dd9cb8cbccd251e4d48254e86562h6d75c3). 80: tcp: 172.17.0.2: 80: erreur d'entrée/sortie.

En suivant le guide non officiel, j’exécute docker run -p 8888:5000 prakhar1989/catnip et reçois essentiellement la même erreur: 

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Réponse d'erreur du démon: le pilote a échoué à la programmation de la connectivité externe sur le point de fin focus_swartz (48a0c005779c6e89bf525ead2ecff44a7f092495cd22ef7d1997300292cb), à la suite de la modification de l'en- 8888: tcp: 172.17.0.2: 5000: erreur d'entrée/sortie.

Si je n'essaie pas d'attribuer un port, le conteneur s'exécutera, mais je ne saurai pas comment y accéder.

La version de docker que je cours: 

  • Docker version 1.12.3, build 6b644ec` 
  • docker-compose version 1.8.1, build 004ddae` 
  • docker-machine.exe version 0.8.2, build e18a919` 

Toute aide serait très appréciée. Je vous remercie.

27
Søren Ullidtz

Ceci est dû à un conflit de numérotation de port: github issue here https://github.com/docker/compose/issues/3277

Essentiellement, le port est utilisé! La raison pour laquelle la réinitialisation a fonctionné est qu’elle a effacé les autres mappages.

10
Mrk Fldig

Voici une nouvelle tournure.

La dernière mise à jour de Windows 10 (Mise à jour de Fall Creators, 2017) comporte une nouvelle "fonctionnalité". Il lance automatiquement toutes les applications en cours d'exécution lors de votre dernier arrêt.

Cela reconstitue Docker pour Windows dans un mauvais état. Cela donnait l'impression que ces ports étaient utilisés par quelque chose d'autre - c'était le fantôme de lui-même. Cela expliquait pourquoi ces ports étaient encore utilisés alors que j’arrêtais/démarrais mes conteneurs et même que je redémarrais!

Dans ce cas, la solution consiste simplement à redémarrer le démon Docker.

Pour éviter cela après le prochain arrêt, n'utilisez pas le bouton d'arrêt. Tapez ceci à la place:

shutdown /s /t 0

Cela contourne la nouvelle fonctionnalité.

Voir la réponse de Jason [MS] dans ce fil de discussion:

https://answers.Microsoft.com/en-us/insider/forum/insider_wintp-insider_perf-insiderplat_pc/programs-autostart-after-boot-in-windows-10-fall/09dd8d3e-7b36-45d1-9181- 6587dd5d53ab

Voici la solution de contournement d'un gars (à la fin de ce fil - je n'ai pas essayé moi-même):

http://www.icttoolbox.nl/info/stop-windows-10-creator-fall-reopening-programs-reboot/

46
biscuit314

Le redémarrage du démon Docker résout ce problème temporairement, mais pour le supprimer, je devais désactiver le démarrage rapide de Windows 10, qui est la fonctionnalité décrite par @ biscuit314.

Pour désactiver le démarrage rapide de Windows 10, accédez au Panneau de configuration> Options d'alimentation> Choisissez l'action des boutons d'alimentation> Modifiez les paramètres actuellement indisponibles> Décochez la case Activer le démarrage rapide (recommandé) et Enregistrer les modifications.

 Disable fast startup

12
Phonolog

1) Arrêtez tous les conteneurs en cours docker stop $(docker ps -a -q) puis

2) Arrêtez le Docker sur votre ordinateur et redémarrez-le.

Puis exécutez la commande requise. Cela résoudra le problème.

4
Soumya Boral

Utilisez docker stop $ (docker ps -a -q) uniquement si vous savez si vous souhaitez arrêter tous les conteneurs ou non .... Si oui, veuillez exécuter docker rm $ (docker ps -a - q) enlever les conteneurs ....

Arrêtez ensuite le démon docker - systemctl stop docker Puis démarrez le démon docker - systemctl start docker

Vérifiez également si le démon docker est activé ou non - service docker status

Après avoir suivi toutes les étapes mentionnées ci-dessus, ça devrait aller.

0
Abhishek Jain

Essayez d’arrêter docker et de le relancer en mode administrateur. Après avoir démarré, ouvrez Power Shell en mode administrateur également ........ Parce que l'erreur dit "mkdir", cela résoudra peut-être votre problème. Je ne suis pas sûr mais cela a fonctionné pour moi . Dans le cas de l'utilisation de -P, un conflit de ports ne semble pas être la raison de l'erreur une fois que -P choisira des ports de manière aléatoire. L’erreur elle-même n’était pas très amicale pour moi, mais comme j’ai vu le mot mkdir dessus, j’imaginais que c’était peut-être une erreur de permission, c’est pourquoi j’ai redémarré docker en mode administrateur et démarré Power Shell en mode administrateur.

0