0

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

我正在为 Windows Server 2016(本机变体)运行 Docker。我已经使用 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 在评论部分问我EXPOSE 80我的 Dockerfile 中是否有,以及docker ps命令是否显示我的容器以及预期的端口映射。在这两个方面都是肯定的。我的容器使用参数运行,-d -it因为它是对容器在启动后立即退出的问题的快速 Google 修复。我知道-i“保持 STDIN 打开”和-t“分配伪 tty”,但坦率地说,我不明白其中任何一个意味着什么,或者它是否与问题有关。

EDIT2:我没有在原始帖子中明确提到这一点,但值得注意的是,netstat -a -o没有显示在端口 8082 上侦听的 PID。我希望会是这种情况。应该是这样吗?

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

4

1 回答 1

0

我从Docker 论坛的“artisticcheese”中得到了答案。

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

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

于 2017-07-24T08:42:37.473 回答