Usa*_*eem 5 docker dockerfile docker-for-windows asp.net-docker-extensions
我正在使用VS2017 Docker支持。VS为我创建了DockerFile,当我构建docker-compose文件时,它会创建容器并在172.xxx IP地址上运行应用程序。但是我想在本地主机上运行我的应用程序。
我做了很多事情,但没有任何效果。跟随docker docs作为启动器并构建microsoft示例应用程序。第二个链接运行正常,但是尝试第一个链接方法时出现HTTP错误404。
任何帮助表示赞赏。
为了访问 Docker 文档上发布的示例(您指出该示例不起作用),请按照以下步骤操作,
1 - 列出所有正在运行的 docker 容器
docker ps -a
Run Code Online (Sandbox Code Playgroud)
运行此命令后,您应该能够查看当前正在运行的所有 docker 容器,并且webserver
如果您正确遵循 docker 文档示例,您应该会看到其中列出名称的容器。
webserver
2 - 获取运行容器的IP 地址。为此,请运行以下命令。
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" webserver
Run Code Online (Sandbox Code Playgroud)
您现在应该获得容器正在运行的 IP 地址webserver
,希望您熟悉此步骤,因为它甚至可以在您随问题附上的构建 Microsoft 示例应用程序示例中使用。
访问运行上述命令后获得的 IP 地址,您应该会看到所需的输出。
回答你的第一个问题(在 Windows 的 docker 中使用 localhost 访问 docker 容器),在 Windows 主机中,由于默认 NAT 网络堆栈的限制,你无法使用 localhost 访问容器。访问此链接可以获得此问题的更详细说明。似乎 docker 文档尚未更新,但此问题仅存在于 Windows 主机中。
也报告了一个与此相关的问题 - 请点击此链接查看该问题。
希望这可以帮助你。
编辑
此问题的解决方案似乎将在未来的 Windows 版本中提供。然而该版本发布后,此限制在 Windows 主机中可用。点击此链接 -> https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181
很可能不同的应用程序已经在端口 80 上运行。您必须将您的网站转发到不同的端口,例如:
docker run -d -p 5000:80 --name myapp myasp
Run Code Online (Sandbox Code Playgroud)
并将浏览器指向http://localhost:5000
.
当您启动容器时,您可以通过-p
选项指定哪些内部端口将作为主机上的端口公开。-p 80:80
将网站使用的内部端口暴露80
给主机的端口 80。
如果另一个应用程序已经在端口 80 上侦听,Docker 不会抱怨,例如 IIS、另一个 Web 应用程序或任何具有默认在 80 上运行的 Web 界面的工具。
解决办法是:
转发到不同的端口要容易得多。
要确保您可以连接到端口,请使用 telnet 命令,例如:
telnet localhost 5000
Run Code Online (Sandbox Code Playgroud)
如果您立即看到一个空白窗口,则表示服务器已启动并在此端口上运行。如果您在一段时间后收到消息并超时,则表示没有人在运行。您还可以使用它来检查空闲端口并确保您可以连接到您的容器 Web 应用程序。
PS我一周前遇到了这个问题,因为我试图设置一个 SQL Server 容器进行测试。我已经运行了 1 个默认实例和 2 个命名实例,并且docker
在我尝试创建容器时根本没有抱怨。我花了一段时间才意识到出了什么问题。
归档时间: |
|
查看次数: |
10535 次 |
最近记录: |