基本上,我的目标是使用带有 .NET 8 的 Visual Studio C# 创建一个 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 OS 是 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 快速模式容器调试的产物(详情请参阅此处)。调试配置中用于调试的镜像/容器仅在 VS 内有效。如果右键单击 Dockerfile,则可以构建可在 VS 之外使用的完整镜像。