无法从Windows Server 2016主机到达Docker上的Apache
单挑:我是通用Web管理和Docker的新手。我的错误可能是是由非常愚蠢的东西造成的。无法从Windows Server 2016主机到达Docker上的Apache
我正在运行Docker for 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问我在注释部分,我是否确实有EXPOSE 80
我Dockerfile是否docker ps
命令显示我与预期端口映射容器。两方面都是肯定的。我的容器以参数-d -it
运行,因为这是对容器在启动后立即退出的问题的快速Google修复。我知道-i
“保持STDIN开放”和-t
“分配伪tty”,但我坦率地不明白这些暗示或它是否可能与问题有关。
EDIT2:我没有明确在原岗位提到这一点,但值得一提的是,netstat -a -o
不不显示一个PID监听端口8082我希望这是事实。应该是这样吗?
输出的前50行左右会显示在屏幕截图中。
我从“artisticcheese” in the Docker Forums.
答案您无法连接到容器主机本身内映射IP地址。它是WinNAT的Windows实现中的错误。您需要获取专用IP地址的IP地址,并使用端口号连接到该地址。或者您可以通过公共映射端口从同一个 网络上的其他主机进行访问,即可工作。
我从另一台主机连接,它立即工作。坦率地说,我不知道容器的“私人IP地址”是什么,而不是NAT地址,所以我无法继续处理另一个提示。
您是否尝试过运行'docker ps'并确保容器正在运行?如果是,用'docker exec -it container_id some_command'连接到shell。 – Serey
是的。我的屏幕截图右侧的窗口来自容器内的powershell.exe。从那里,我可以检索没有问题的Apache网页。 – Magnus
你的'Dockerfile'里面还有'EXPOSE 80'吗? – Grimmy