web-dev-qa-db-ja.com

Windowsコンテナは、「ネットワークNATでのエンドポイントの作成に失敗しました:HNSはエラーで失敗しました:エンドポイントの作成に失敗しました」というエラーで起動できませんでした。

私は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が他のサービスによって使用されていないことを確認しました。

誰かが同じ問題に直面しましたか?

8
pinkal vansia

周りを検索した後、私は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

次に、システムを再起動するだけで、エラーはなくなりました。

11
pinkal vansia

私にとって、これらのステップは問題を解決しました:

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

6
HamedH

同様のエラーが発生しました。

$ 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
4
Der_Meister

私はすでにCentosで作業していたdockerとdocker-composeを持っていました。 Windows Server 2016で機能するように、次の変更を行いました。

  1. Dockerサービスを停止し、NATを削除して、Dockerサービスを開始します。

    ps>stop-service docker
    ps>Get-ContainerNetwork | Remove-ContainerNetwork -Force -ea SilentlyContinue
    ps>start-service docker   
    
  2. Docker-compose.ymlでネットワークを構成します

    version: '3.7'
    networks:
      default:
        external:
          name: nat    
    

それでおしまい!

0