Windows 10 Proで最新のDocker CE、17.09を実行しており、2つの異なる例を使用してPermission deniedを取得しています。
Dockerサイトの例:docker run -d -p 80:80 --name webserver nginx
AWSサイトDockerの例:docker run -p 80:80 hello-world
両方が同じエラーを返しました。
docker:デーモンからのエラー応答:ドライバーはエンドポイントの外部接続のプログラミングに失敗しましたXXXXX:ユーザーランドプロキシの起動エラー:0.0.0.0:80のバインド:予期しないエラー許可が拒否されました。
Windows 10 Proで問題を解決したところ、World Wide Web Publishing Serviceが何らかの形で有効になっていたことがわかりました。 netstat -a -n
を介して、どこか/何らかの方法で:80のリスナーがいることに気づいた後、それを見つけるのにしばらくかかりました。愚かな私。シャットダウンして、ポート80で問題ありませんでした。
問題は、80
、443
、22
、..(一般的なポート<1024
)のような汎用ポートはシステム保護されているため、使用するには特権が必要ですここでは、システム管理者になり、管理者としてコマンドを実行するだけで十分です。
:80
である必要がない場合は、:8080
などの他のポートを使用してみてください。それでも解決せず、エラーが変わらない場合は、問題はさらに深くなります。
実行すべき最初のアクションは、コマンドを実行することです。
netstat -aon | findstr [port#]
これにより、特定のポートでプロセスが実行されているかどうかがわかります。その場合は、次のコマンドでプロセスを強制終了できます。
taskkill /PID [PID] /F
これにより、そのポートを使用するプロセスが強制終了されます。その後、新しいプロセスをポートにバインドできます。
また、使用したいポートでプロセスが実行されているというnetstat -aon
が返されなかったが、その上でプロセスが実行されていたため、新しいプロセスを実行できないポート。次の問題を解決できました。
ネットワークを使用してWindowsをセーフモードで起動する
Powershell/cmdで次のコマンドを実行します。
netsh int ipv4 add excludedportrange protocol=tcp startport=[PORT] numberofports=1
これによりポートが予約されるため、通常のWindowsモードで起動したときに、使用する前にアプリケーションがポートを盗むことはありません。
このエラーが発生した理由は、ポートがすでに使用されていたためです。別のポートに変更すると、このエラーは表示されなくなりました。
ポートはデバッグなしでVisual Studioで使用されています。閉じてから再度開きます。
管理者としてCMDウィンドウからDockerコマンドを実行しているWindows 10 Proでは、まだ問題があります(上記の@ mikael-chudinovによる)。私は本当にポート80を使いたいので、他の答えは私には向いていません。
www.jens79.de のJensによるこのブログ投稿を参照してください。
PowerShellから、次のコマンドを実行します。
Get-NetTCPConnection -LocalPort 80 | Format-List
これは、pid = 4の単一プロセスを示しています
システムモニターでは、これは「システム」プロセスですが、上記の記事によると、実際には「World Wide Web Publishing Service」としてIIS実行されています。
IISを実行する必要がないと仮定して、Windowsサービスコンソールで「World Wide Web発行サービス」を停止して無効にしてから、もう一度試してください。
古いプロジェクトを維持するためにドッカー環境をロードしようとしたときに、最近この問題に遭遇しました。私の場合、Apacheのデフォルトのインスタンスは、最近のOSの更新後にMacで実行されていたため、ポート80が使用可能になる前にシャットダウンする必要がありました。次のコマンドでシャットダウンできます:
Sudo /usr/sbin/apachectl stop
それでも問題が解決しない場合は、次のコマンドを使用して、特定のポート(この場合は80)で実行されているもののPIDを確認できます。
lsof -t -i :80
Killコマンドを使用して、これらのポートで実行されているものをすべてシャットダウンしようとすることができます。重要なものを殺さないように気をつけてください!
kill $(lsof -t -i :80)
これは私を助けました。エラーメッセージに記載されているポートは、実際には予約済みのポート範囲のいずれかにあります。 Windowsは49690を超えるポートにバインドできません
私も同じ問題を抱えています。 proxyがシステムに既にインストールされている場合、コンテナポートはプロキシに囲まれ、プロキシを使用してコンテナを1回実行する必要があり、次回はこれを行う必要はありません。 。
同じ問題が発生した場合、コンテナを起動しようとすると、コンテナが起動せず、次のエラーメッセージが表示されます。
デーモンからのエラー応答:ドライバーはエンドポイントの外部接続のプログラミングに失敗しました.....ユーザーランドプロキシの起動エラー:0.0.0.0:1521のバインド:予期しないエラーPermission denied。
oracleコンテナを起動する次のコマンドを使用します。
docker run -d -p 1521:1521 ...
私にとっては、適切にアンインストールされていないアンインストールされたOracleインスタンスの結果だと思います。まだ使用されているポートか何か。しかし、別のポートに変更するだけで、次のように問題が修正されました。
docker run -d -p 1523:1521 ...
ホストマシンのnginxが起動しているかどうかを確認し、停止します。
Sudo service nginx stop
問題は、ポート80でイメージを実行する権限がないことです。そうするには、docker runコマンドに-user rootを追加します。これにより、ルート権限が提供され、実行されます。