私はWindowsServer 2016TP5でWindowsコンテナーを試しています。ポートマッピングオプション-p 80:80
でコンテナを実行しているときに、突然エラーが発生し始めました。
c:\>docker run -it -p 80:80 Microsoft/iis cmd
docker: Error response from daemon: failed to create endpoint sharp_brahmagupta on network nat: HNS failed with error : Failed to create endpoint.
他のコンテナが実行されておらず、ホストマシンのポート80が他のサービスによって使用されていないことを確認しました。
誰かが同じ問題に直面しましたか?
周りを検索した後、私はgithubの this 問題に気づきました。これは、WindowsサーバーTP5上のWindowsコンテナーの既知の問題のようです。
次に、 this フォーラムのおかげで、解決策が見つかりました。以下のコマンドでアクティブな静的ポートマッピングを確認できます。
C:\>powershell
PS C:\>Get-NetNatStaticMapping
StaticMappingID : 3
NatName : Hda6caca4-06ec-4251-8a98-1fe0b4c5af88
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 80
InternalIPAddress : 172.31.181.4
InternalPort : 80
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True
上記の出力から、コンテナが削除されても、静的ポートマッピングは削除されず、まだアクティブであるように見えました。
しかし、私は以下のコマンドでそれを削除しました。
PS C:\> Get-NetNatStaticMapping | ? ExternalPort -eq 80 | Remove-NetNatStaticMapping
次に、システムを再起動するだけで、エラーはなくなりました。
私にとって、これらのステップは問題を解決しました:
Stop-Service docker
Get-ContainerNetwork | Remove-ContainerNetwork
Get-NetNat | Remove-NetNat
Get-VMSwitch | Remove-VMSwitch
Start-Service docker
(JMesser81の提案: https://github.com/Microsoft/Virtualization-Documentation/issues/27 )
同様のエラーが発生しました。
$ docker --version
Docker version 1.13.0-rc3, build 4d92237
$ docker-compose -f .\docker-compose.windows.yml up
Starting musicstore_db_1
ERROR: for db Cannot start service db: {"message":"failed to create endpoint musicstore_db_1 on network nat: HNS failed with error : Unspecified error"}
ERROR: Encountered errors while bringing up the project.
静的マッピングの削除は機能せず、ネットワークの削除のみが役立ちました。
Get-ContainerNetwork -Name nat | Remove-ContainerNetwork
管理者としてPowerShellでコマンドを実行し、Dockerを再起動します。
更新:
CleanupContainerHostNetworking.ps1 スクリプトを使用して、Docker17ネットワークの問題を解決します。
.\CleanupContainerHostNetworking.ps1 -Cleanup -ForceDeleteAllSwitches
私はすでにCentosで作業していたdockerとdocker-composeを持っていました。 Windows Server 2016で機能するように、次の変更を行いました。
Dockerサービスを停止し、NATを削除して、Dockerサービスを開始します。
ps>stop-service docker
ps>Get-ContainerNetwork | Remove-ContainerNetwork -Force -ea SilentlyContinue
ps>start-service docker
Docker-compose.ymlでネットワークを構成します
version: '3.7'
networks:
default:
external:
name: nat
それでおしまい!