Windows上でDockerを実行することについて多くの質問があることは承知していますが、この質問はWindows上で真新しいDocker for Windowsを実行することに関するものです。
私の場合、Windows 10 Pro 64ビットを使用しています。サイトによると、このバージョンはサポートされるべきです。
ここで見つけたチュートリアルに従っています: https://prakhar.me/docker-curriculum/
もちろん公式ガイドにも従いました: https://docs.docker.com/docker-for-windows/
両方のチュートリアルで、-P
パラメーターを使用してポートを割り当てようとしたとき、またはポート-p 8080:5000
を指定しようとしたときに、同じエラーメッセージが表示されます。
公式ガイドでは、docker run -d -p 80:80 --name webserver nginx
を実行して以下を取得します。
C:\ Program Files\Docker\Docker\Resources\bin\docker.exe:デーモンからのエラー応答:ドライバーはエンドポイントWebサーバーでの外部接続のプログラミングに失敗しました(f9946544e4c6ad2dd9cb8cbccd251e4d48254e86562bd8e6da75c3bd42c7e45a):ユーザーランドプロキシの開始エラー:mkdir /port/tcp:0.0 80:tcp:172.17.0.2:80:入出力エラー。
非公式ガイドに従ってdocker run -p 8888:5000 prakhar1989/catnip
を実行すると、基本的に同じエラーが発生します。
C:\ Program Files\Docker\Docker\Resources\bin\docker.exe:デーモンからのエラー応答:ドライバーは、エンドポイントfocused_swartz(48a0c005779c6e89bf525ead2ecff44a7f092495cd22ef7d19973002963cb232の外部接続のプログラミングに失敗しました:mkdir /port/tcp:0.0.0.0: 8888:tcp:172.17.0.2:5000:入出力エラー。
ポートを割り当てようとしない場合、コンテナは実行されますが、アクセス方法がわかりません。
私が実行しているドッカーのバージョン:
どんな助けも大歓迎です。ありがとうございました。
これは、ポート番号の競合が原因です。githubissue here https://github.com/docker/compose/issues/3277
基本的に、ポートは使用中です!リセットが機能した理由は、他のマッピングを消去したためです。
ここに新しい工夫があります。
最後のWindows 10アップデート(Fall Creators Update、2017)には新しい「機能」があります。最後にシャットダウンしたときに実行されていたアプリケーションが自動的に起動します。
これにより、Docker for Windowsが悪い状態に再構成されます。それは、それらのポートが他の何かによって使用されているように見えました-それはそれ自身の幽霊でした。これは、コンテナを停止/起動し、さらに再起動しても、これらのポートがまだ使用されている理由を説明しました!
この場合の解決策は、単にDockerデーモンを再起動することです。
次回のシャットダウン後にこれを防ぐには、シャットダウンボタンを使用しないでください。代わりにこれを入力してください:
shutdown /s /t 0
これにより、新しい機能がバイパスされます。
このスレッドのJason [MS]からの回答を参照してください。
ある人の回避策は次のとおりです(このスレッドの最後から-自分で試したことはありません):
http://www.icttoolbox.nl/info/stop-windows-10-creator-fall-reopening-programs-reboot/
1)実行中のすべてのコンテナdocker stop $(docker ps -a -q)
を停止してから
2)マシンでDockerを停止して再起動します。
次に、必要なコマンドを実行します。これで問題が解決します。
Windows OSの場合、Dockerを再起動してください。これで問題が修正されました。
Linux-Debianユーザーの場合、
docker stop $(docker ps -a -q)を使用するのは、すべてのコンテナを停止するかどうかがわかっている場合だけです。..はいの場合は、docker rm $( docker ps -a -q)コンテナを削除するには....
次に、Dockerデーモンを停止します-systemctl stop docker次に、Dockerデーモンを起動します-systemctl start docker
また、Dockerデーモンが起動しているかどうかを確認します-service docker status
上記のすべての手順を実行すると、元気になります。...
管理者モードでdockerを停止し、再度開始してみてください。起動後、管理者モードでもPower Shellを開きます。エラーには「mkdir」と表示されるため、問題が解決する可能性があります。よくわかりませんが、うまくいきました。 -Pを使用する場合、-Pがポートをランダムに選択すると、ポートの競合がエラーの原因とは見なされません。エラー自体は私にはあまり馴染みがありませんでしたが、mkdir Wordを見たので、それが許可エラーである可能性があると想像しました。
この問題に関するすべての提案を試みました。すべてのコンテナを強制終了し、Docker Desktopを再起動し、「高速起動」を無効にして、コンピューターを再起動し、「実験機能」を無効にします。そのようなものはどれもうまくいきませんでした。
最終的には実行しました。試してみたいことがあります(実際に何が修正されたのかわからないため)。