8

我一直在 Windows Server 2016 TP5 上尝试 Windows Containers。突然,我在运行带有端口映射选项的容器时开始出错-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 没有被任何其他服务使用。

有没有人面临同样的问题?

4

4 回答 4

12

在四处搜索后,我在 github 上偶然发现了这个问题。这似乎是 Windows 服务器 TP5 上的 Windows 容器的一个已知问题。

然后感谢这个论坛,我找到了解决方案您可以使用以下命令检查活动静态端口映射

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

然后只需重新启动系统,错误就消失了。

于 2016-06-28T08:28:35.583 回答
9

对我来说,这些步骤解决了这个问题:

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/273 )

于 2016-12-22T13:42:54.993 回答
6

我有类似的错误。

$ 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脚本解决 Docker 17 网络问题。

.\CleanupContainerHostNetworking.ps1 -Cleanup -ForceDeleteAllSwitches
于 2016-12-14T10:51:47.773 回答
0

我有一个已经在 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    
    

而已!

于 2019-02-06T09:52:17.643 回答