无法从 Windows Server 2016 主机访问 Docker 上的 Apache

Can't reach Apache on Docker from Windows Server 2016 host machine

注意:我在一般 Web 管理和 Docker 方面都是新手。我的错误可能是由一些非常愚蠢的事情引起的。

我是 运行 Docker Windows Server 2016(原生版本)。我使用 Nano Server 和 Apache 2.4 (nanoserver/apache24) 提取并构建了一个简单的 Docker 基础镜像。我从这个图像制作了一个容器并将容器端口 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。这也不起作用。我在这里配置错误是什么?

下面是我的过程的屏幕截图。左侧主机中的 PowerShell,右侧容器中的 PowerShell。

编辑:@Grimmy 在评论部分问我我的 Docker 文件中是否有 EXPOSE 80 以及 docker ps 命令是否显示我的容器和预期的端口映射。在这两个方面都是肯定的。我的容器以参数 -d -it 运行,因为这是对容器在启动后立即退出的问题的快速 Google 修复。我知道 -i "keeps STDIN open" 和 -t "allocates pseudo-tty",但坦率地说,我不明白其中任何一个意味着什么,或者它是否与问题相关。

EDIT2:我在原来的 post 中没有明确提到这一点,但值得注意的是 netstat -a -o 确实 显示监听端口的 PID 8082. 我希望情况会如此。应该是这样吗?

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

我从'artisticcheese'in the Docker Forums.

那里得到了答案

You can not connect to mapped IP address within container host itself. it’s bug in Windows implementation of WinNAT. You need get private IP address of container and connect to it using port number. Or you can access through public mapped port from another host on the same network, that shall work.

我从另一台主机连接,它立即工作。坦率地说,我不知道容器的 "private IP address" 是什么,而不是 NAT 地址,所以我无法继续其他提示。