无法从Windows Server 2016主机到达Docker上的Apache

负责人:我是通用Webpipe理和Docker的新手。 我的错误可能是由一些非常愚蠢的东西造成的。

我正在运行Docker for Windows Server 2016(本机版本)。 我已经使用Nano Server和Apache 2.4(nanoserver / apache24)构build了一个简单的Docker基础镜像。 我从这个映像中创build了一个容器,并将容器端口80映射到本地端口8082。

从容器内部,我可以使用Invoke-WebRequest -uri http://localhost:80并检索默认的apache文档。 不过,我也希望容器外部Invoke-WebRequest -uri http://localhost:8082能够检索同一个文件。 这不起作用。 我也试过使用容器的NAT地址,运行Invoke-WebRequest -uri http://172.23.58.7:8082 。 这也不工作。 我在这里configuration错了什么?

从我下面的过程截图。 主机左侧的PowerShell,右侧的PowerShell里面的容器。

我的错误屏幕截图

编辑:@Grimmy在评论部分问我在我的Dockerfile中是否有EXPOSE 80和docker docker ps命令是否显示我的容器与预期的端口映射。 这两个都是肯定的。 我的容器使用参数-d -it运行,因为这是对容器在启动后立即退出的问题的快速Google修复。 我知道-i “保持STDIN开放”和-t “分配伪tty”,但我坦率地不明白这些暗示或者是否与问题有关。

编辑2:我没有在原始文章中明确提到这一点,但值得注意的是, netstat -a -o不显示端口8082上的PID监听。我期望这是事实。 应该是这样吗?

截图中显示前50行左右的输出。

我在Docker论坛上从'artisticcheese'得到了答案。

您无法连接到容器主机本身内的映射IP地址。 这是WinNAT的Windows实现中的错误。 您需要获取容器的私有IP地址,并使用端口号连接到该容器。 或者你可以通过公共映射的端口从另一台主机访问同一个networking,这个工作。

我从另一个主机连接,并立即工作。 坦率地说,我不知道容器的“私人IP地址”是什么,而不是NAT地址,所以我不能继续处理另一个问题。