【发布时间】:2022-02-17 02:48:08
【问题描述】:
我在 .net core 5.0 中创建了简单的 RestAPI - 它只有一项工作,返回 StatusCode 200 或 500:
[ApiController]
[Route("api")]
public class HomeController : Controller
{
[HttpGet]
[Route("checktrue")]
public IActionResult HealthCheckTrue()
{
return Ok();
}
[HttpGet]
[Route("checkfalse")]
public IActionResult HealthCheckFalse()
{
return StatusCode(500);
}
}
当我在本地构建它时,一切正常,但是一旦我将它托管在 docker 容器中,我就无法通过 Postman 访问它。
Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /src
COPY ["HealthCheck/HealthCheck.csproj", "HealthCheck/"]
RUN dotnet restore "HealthCheck/HealthCheck.csproj"
COPY . .
WORKDIR "/src/HealthCheck"
RUN dotnet build "HealthCheck.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "HealthCheck.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HealthCheck.dll"]
当我运行 docker 容器时,它会正常启动:
=info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://0.0.0.0:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
(端口映射到 5020) 我正在发送请求: http://localhost:5020/api/checktrue 我得到错误:socker hang up
当我在我的机器上执行相同的请求时,它工作正常。
你知道如何解决这个问题吗?
【问题讨论】: