繁体   English   中英

带Docker的Windows容器:无法从主机到达容器中的httpd(Win2016 TP5)

[英]Windows Container with Docker: Cannot reach httpd in container from host (Win2016 TP5)

我有一台Windows Server 2016 TP5机器,我用它作为容器主机。

我有一个运行的Windows容器 ,我使用Docker管理 在这个容器里面,我有一个在端口88上运行的Apache httpd。

启动容器时的端口映射是: 0.0.0.0:80->88/tcp :80-> 88 / 0.0.0.0:80->88/tcp ,因此我将容器主机的端口80映射到容器的端口88。 这是docker inspect的输出: http//pastebin.com/AVem1eGV

我现在可以通过DNS或IP从网络中的任何其他计算机访问Apache http起始页面。

就我而言:

但是当我尝试从主机系统本身或从容器内部调用相同内容时同样不起作用 因此,在主机系统上,我尝试通过浏览器或wget访问相同的URL,并获取:

C:\> wget -UseBasicParsing http://documents.test2016-3.company.com/
wget : Unable to connect to the remote server

在这两种情况下。

但我可以从主机本身以及容器中ping主机。

来自主持人:

C:\>ping test2016-3.company.com    
Ping wird ausgeführt für TEST2016-3.company.com [fe80::847a:1430:8a10:b120%4] mit 32 Bytes Daten:

从容器:

PS C:\> ping documents.test2016-3.company.com
Pinging documents.test2016-3.company.com [10.10.1.162] with 32 bytes of data:

这似乎能够很好地解决这个名字。

这是什么工作 ,虽然是直接(不通过端口映射)调用通过容器的主机端口运行Apache的默认页面(这是双赢的de6u4068naf)和,无论是从主机以及容器内:

HTTP://共赢de6u4068naf:88 /

只是从主机或容器本身通过容器主机主机名和映射端口的路径不能正常工作!

防火墙规则允许来自任何远程地址或端口80的端口80上的所有内容(=入站和出站规则都设置为“允许”为“任何”)。

我知道Microsoft / Docker将容器/ docker支持的网络代码库从Windows Server 2016 TP4更改为TP5。 不确定这是否相关,或者这是一个错误还是我还没有正确配置。

我做了一个测试,并将Docker / Container从上面的图片中删除,并在端口80上的容器主机系统上安装了一个普通的Apache httpd(并且根本没有运行Docker),只是为了检查这样的设置是否有效,以便确保它实际上与Docker / Container有关,而不是我的网络/主机配置问题。 这工作正常,我可以从外部以及从主机本身到达Apache,因此它必须是与Docker / Container相关的问题。

环境:

  • Windows Server 2016 TP5
  • Docker版本1.12.0-dev,build 2b97201

得到了对微软的Github的回复:

https://github.com/Microsoft/Virtualization-Documentation/issues/253#issuecomment-217975932

这是我们的Windows NAT实现(WinNAT)中的一个已知限制,您无法直接从容器(NAT)主机访问静态端口映射中的外部端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM