我使用命令
docker run -d -p 6000:5000 webapi
启动了 docker 容器,它在 localhost:5000
端口上运行 C# ASP.NET Core 应用程序。当我尝试使用 Postman 向主机上的 URL http://localhost:6000/api/Users 发送 GET 请求时(它应该只返回整个用户列表),它显示“错误:套接字挂起”。如果您进入容器内部并尝试仅使用端口 5000 将相同的 GET 请求发送到指定的 URL,则一切都会正常。可能是什么问题?
当您使用
docker run
运行容器时,不会使用您的启动设置,并且您的应用程序会侦听默认端口。对于 .NET 8,端口为 8080;对于 .NET 7 及更早版本,端口为 80。
如果您的应用程序是.NET 8,您应该使用docker run -d -p 6000:8080 webapi
由于您的应用程序是 webapi,因此您应该知道 Swagger 默认配置为仅在开发环境中可用。 Docker 容器不被视为开发环境,因此默认情况下 Swagger 不可用。
要使其可用,您可以将 ASPNETCORE_ENVIRONMENT 变量设置为“开发”,然后您的命令将如下所示
docker run -d -e ASPNETCORE_ENVIRONMENT=Development -p 6000:8080 webapi
您的 webapi(包括 Swagger)应该可以在 http://localhost:6000/ 上使用。