基本上,我的目标是使用 Visual Studio C# 和 .NET 8 创建一个 API,并从 Docker 运行它,并通过简单的 curl 或 postman 调用来调用它。
我在 VS 中创建了一个带有 Docker 的 API 项目。在 Docker 中通过 VS 运行项目是可行的。当我停止 IDE 中的“Docker Start”时,容器仍在 Docker 中运行。 VS 启动的带有 swagger 的 Web 浏览器停止了。如果我尝试通过某种方式连接,它会给我“服务器的空回复”。另外,当我停止并启动 docker 容器时,它不起作用。
如何从 Docker 运行此示例,并在 Visual Studio 外部进行 API 调用?
我的代码是使用项目模板“ASP.NET Core Web API”时获得的简单API项目。我选择禁用“配置 HTTPS”。 Docker 操作系统是 Linux。在我的 Program.cs 中,我尝试禁用“UseAuthorization”,但这没有帮助。
我从 Visual Studio 运行的结果例如来自命令行:
C:\Users\wintinkm>curl -X GET http://localhost:32785/WeatherForecast
[{"date":"2024-11-19","temperatureC":17,"temperatureF":62,"summary":"Bracing"},{"date":"2024-11-20","temperatureC":19,"temperatureF":66,"summary":"Warm"},{"date":"2024-11-21","temperatureC":16,"temperatureF":60,"summary":"Mild"},{"date":"2024-11-22","temperatureC":17,"temperatureF":62,"summary":"Sweltering"},{"date":"2024-11-23","temperatureC":29,"temperatureF":84,"summary":"Mild"}]
当我从 Visual Studio 停止正在运行的 docker 时,我仍然看到 docker 容器正在运行,但现在相同的命令给出:
C:\Users\wintinkm>curl -X GET http://localhost:32786/WeatherForecast
curl: (52) Empty reply from server
如果我停止并启动在 Docker 中创建的容器 VS,我会得到相同的结果。
当我在 Docker 中停止该容器时,我得到的结果是服务器根本无法访问。所以有些事情正在运行,我只是被拒绝了。我不知道为什么,因为我没有使用 SSL 并禁用了授权。
C:\Users\wintinkm>curl -X GET http://localhost:32786/WeatherForecast
curl: (7) Failed to connect to localhost port 32786 after 2242 ms: Could not connect to server
您所看到的是 VS 快速模式容器调试的产物(有关详细信息,请参阅here)。调试配置中用于调试的镜像/容器只能在 VS 中工作。如果右键单击 Dockerfile,您可以构建可在 VS 外部使用的完整映像。