J'exécute la dernière version de Docker CE, 17.09, sous Windows 10 Pro, et j'utilise deux exemples différents pour obtenir autorisation refusée.
Exemple de site Docker: docker run -d -p 80:80 --name webserver nginx
Exemple de site docker AWS: docker run -p 80:80 hello-world
les deux ont renvoyé la même erreur.
docker: réponse d'erreur du démon: échec du pilote de programmation de la connectivité externe sur le noeud final XXXXX: erreur de démarrage du proxy userland: liaison pour 0.0.0.0:80: inattendu error Autorisation refusée.
J'ai résolu mon problème sous Windows 10 Pro. Il s'est avéré que le service de publication World Wide Web était activé. Il m'a fallu un certain temps pour constater que, après avoir noté via netstat -a -n
que j'avais un auditeur de: 80 quelque part/d'une manière ou d'une autre. Que je suis bête. Fermez-le et j'allais bien avec le port 80.
Changez le port en utilisant ces commandes comme suit:
docker container ls //show the container infos, note the ports info.
docker stop webserver
docker rm webserver //shut down currently webserver
docker run -d -p 8080:80 --name webserver nginx (or 8000:80)
Enfin, saisissons localhost: 8080 pour indiquer si la connexion aboutit dans le navigateur.
Le problème est que les ports à usage général comme 80
, 443
, 22
, .. (en général, les ports <1024
) sont protégés par le système. Vous devez donc disposer de privilèges pour les utiliser. , ici, il suffira d’être un administrateur système et d’exécuter une commande en tant qu’administrateur.
S'il ne doit pas nécessairement s'agir de :80
essayez d'utiliser un autre port, comme :8080
, si cela ne résout pas le problème et que l'erreur ne change pas, le problème va plus loin.
Sur macOS Mojave Version 10.14.2, cette commande a fonctionné pour moi:
Sudo apachectl stop
Avant d'exécuter cette commande, lancez
Sudo lsof -i -P | grep “LISTEN"
et vérifiez si httpd
est l'identifiant de l'écouteur sur :80
par exemple:
Si c'est le cas, c'est le Mac Apache qui est à l'origine du problème.
La première chose à faire est d’exécuter la commande:
netstat -aon | findstr [port#]
Cela vous indiquera si un processus est en cours d'exécution sur le port donné. Si tel est le cas, vous pouvez arrêter le processus avec la commande suivante:
taskkill /PID [PID] /F
Cela va tuer le processus en utilisant ce port. Vous pourrez alors lier un nouveau processus au port.
J'ai aussi rencontré un moment où netstat -aon
ne retournait pas qu'un processus était en cours d'exécution pour un port que je souhaitais utiliser, mais il était certain qu'un processus en cours d'exécution ne me permettait pas d'exécuter un nouveau processus. Le port. J'ai pu remédier au problème avec les éléments suivants:
Démarrer Windows en mode sans échec avec la mise en réseau
Dans powershell/cmd, exécutez la commande suivante:
netsh int ipv4 add excludedportrange protocol=tcp startport=[PORT] numberofports=1
Cela réservera le port afin que, lorsque vous redémarrez en mode Windows normal, aucune application ne vole le port avant que vous puissiez l'utiliser.
J'ai eu cette erreur parce que le port était déjà utilisé. Changé sur un autre port et je n'ai plus reçu cette erreur.
Le port est utilisé par Visual Studio sans débogage. Ferme ET puis rouvre.
Sous Windows 10 Pro, en exécutant la commande Docker à partir d'une fenêtre CMD avec En tant qu'administrateur, j'ai toujours les problèmes (conformément à @ mikael-chudinov ci-dessus). Je veux vraiment utiliser le port 80 pour que les autres réponses ne me conviennent pas.
S'il vous plaît voir ce post de blog par Jens à www.jens79.de
Depuis Powershell, lancez la commande:
Get-NetTCPConnection -LocalPort 80 | Format-List
Ceci pour moi a montré un processus unique avec pid = 4
Dans le Moniteur système, il s’agit du processus "Système", mais selon l’article susmentionné, il s’agit en réalité de IIS exécuté en tant que "Service de publication World Wide Web".
En supposant que vous n'avez pas besoin que IIS soit en cours d'exécution dans la console des services Windows, arrêtez et désactivez "Service de publication World Wide Web", puis réessayez.
Je suis récemment tombé sur ce problème en essayant de charger un environnement de menu fixe pour maintenir un ancien projet. Dans mon cas, l'instance par défaut d'Apache s'exécutait sur mon Mac après une mise à jour récente du système d'exploitation et devait être fermée avant que le port 80 ne soit disponible. Vous pouvez l'arrêter avec cette commande:
Sudo /usr/sbin/apachectl stop
Si le problème persiste, vous pouvez utiliser la commande suivante pour voir les PID de ce qui est en cours d'exécution sur un port donné (dans ce cas, 80):
lsof -t -i :80
Vous pouvez essayer d'arrêter tout ce qui est en cours d'exécution sur ces ports avec la commande kill; Assurez-vous simplement de ne rien tuer d'important!
kill $(lsof -t -i :80)
Cela m'a aidé. Le port mentionné dans le message d'erreur était en effet dans l'une des plages de ports réservées: Windows ne peut pas se lier au port supérieur à 4969
J'ai aussi le même problème. Si un proxy est déjà installé sur votre système, le port du conteneur est entouré d'un proxy et vous devez utiliser un proxy pour exécuter le conteneur une fois. Vous n'aurez pas à le faire pour la prochaine fois. .
Même problème, mon conteneur ne voulait tout simplement pas démarrer et afficher le message d'erreur suivant lorsque je tentais de démarrer le conteneur:
Réponse d'erreur du démon: le pilote n'a pas réussi à programmer la connectivité externe sur le noeud final ..... Erreur lors du démarrage du proxy utilisateur: Lier pour 0.0.0.0:1521: erreur inattendue Autorisation refusée.
avec la commande suivante pour démarrer un conteneur Oracle:
docker run -d -p 1521: 1521 ...
Pour moi, je pense que c'est le résultat d'une instance Oracle désinstallée qui n'est pas correctement désinstallée. Port encore utilisé ou quelque chose. Mais le simple changement de port a résolu le problème comme indiqué ci-dessous:
docker run -d -p 1523: 1521 ...
Vérifiez si le nginx de la machine hôte est démarré et arrêtez-le.
Sudo service nginx stop
Le problème est que vous ne disposez pas de l'autorisation nécessaire pour exécuter l'image sur le port 80. Pour ce faire, ajoutez - user root dans la commande d'exécution de votre menu fixe. Cela fournira les privilèges root et il sera exécuté.