asp.net - 从命令行运行时,Docker 容器不起作用
问题描述
我一直在使用 Docker 开发一个 ASP.NET 应用程序,当我通过 Visual Studio 启动它时,它运行良好!但是,如果我尝试从命令行(或 powershell,或 VS 的 CLI/Powershell)运行任何东西,它会运行,但它生成的容器会拒绝所有连接。
我在安装了 Docker Desktop 的 Windows 10 NT 上尝试运行 ubuntu:18.04 映像(我也尝试过 Alpine、ubuntu:16.04)。
重现步骤:
- 在 Visual Studio 中创建一个默认的 ASP.NET 应用程序
-添加 Docker 支持
- 选择“Docker”运行
- 打开浏览器,导航到 localhost:[YourPort]
-成功!按预期工作。
然后,使用相同的图像或下载的图像(我试图dockersamples/static-site
确认这不是特定项目的问题):
-打开CMD
-docker run -p [HostPort]:[ContainerPort] [SameImageVSUses:tag]
在不同的端口上运行
- 看到docker ps
显示两个容器彼此相邻运行
-打开浏览器(Firefox),得到错误
The connection was reset
更新
我将 ASP.NET 应用程序的程序类更改为使用 0.0.0.0 而不是 localhost,我相信这是必要的,但现在我明白了
Secure Connection Failed
PR_END_OF_FILE_ERROR_
如果我curl localhost:[MyPort]
,我得到(52) empty reply from server
/更新
好吧,也许 Visual Studio 做了更多我不知道的事情。
一点点挖掘表明是的,它会引发大量额外的争论!使用 Visual Studio 的复制/粘贴命令确实给了我......完全相同的错误。
澄清一下,容器仍然从命令行运行,我可以 ssh 或docker inspect
它们(事实上,VS 启动和 CMD 启动的容器docker inspect
除了绑定到的网络地址之外是相同的)。在构建和启动容器的过程中,我根本没有收到任何错误消息,所以如果它的某些部分失败,它会默默地这样做。
我对 Docker 比较陌生,但我似乎找不到解决这个问题的方法,甚至找不到它背后的原因。Visual Studio 在做什么而我没有?我已经尝试了我所知道的一切,我什至不得不擦拭我的机器(不相关的),当我重新安装所有东西时发生了完全相同的事情。我的直觉告诉我这是我机器上的东西,但是 VS 启动的那个也应该失败,对吧?
如果我正在运行 CLI 的东西,我找不到任何告诉我翻转魔法开关的东西,而且我对 dockerfile 或命令参数所做的任何事情似乎都不起作用。我从未使用过 VirtualBox 或 Docker Toolbox,这不应该是一个由旧程序搞砸的不稳定配置,因为它在从 Visual Studio 启动时运行良好!啊!
我希望这确实是一个我没有翻转过的神奇开关,否则有一些非常基本的东西我不了解我正在使用的东西。
解决方案
如果您尝试运行最近的 VS 模板,您只需要按照以下说明进行操作:
进入Api项目目录:
cd ./src/YourApiDirectory
构建命令:
docker build -f ./Dockerfile --force-rm -t yourapiimage:dev ..
运行命令:
docker run -it --rm -e "ASPNETCORE_ENVIRONMENT=Development" -p 58817:80 --name yourapiname yourapiimage:dev
请注意,最后一个命令中的“-it”标志将以“交互”模式运行您的图像。另请注意,我仅通过端口 58817 使用 http 连接。
推荐阅读
- node.js - 将 ElephantSQL 与 node.js 连接
- python-3.x - 遵循 IG 抓取教程并停留在 XPath/其他问题上
- angular - 将 HTML 传递到 Mat 对话框
- android - 来自 instagram 克隆 android 应用程序的数据未反映在 Firebase 中的实时数据库中
- build - 从 Azure DevOps 构建可视化代码指标的选项有哪些?
- azure - 是否可以在日志分析中查询 Azure 数据仓库
- xcodebuild - iOS 14,为设备和模拟器创建库时出现 lipo 错误
- bash - 如何从 shell 脚本中的 .csv 文件的列中读取多个值
- javascript - 更新数据时无法在 deck.gl 中调用 set Props
- javascript - 函数参数值在 JS 中的对象解构中不起作用