在指定的端口上无法访问ASP.NET Core+Docker



如果ASP.NET Core 3.1应用程序运行在容器中,我将无法访问容器。目标是在端口5000上的容器中运行应用程序。当我使用标准VS配置文件在本地运行它时,我会导航到http://localhost:5000/swagger/index.html以便加载swaggerUI。我想使用docker来实现同样的事情。

复制我的问题的步骤:

  • 添加带有暴露的5000端口和ENV ASPNETCORE_URLS变量的dockerfile:

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
    WORKDIR /app
    ENV ASPNETCORE_URLS=http://+:5000
    EXPOSE 5000
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
    WORKDIR /src
    COPY ["myapp/myapp.csproj", "myapp/"]
    RUN dotnet restore "myapp/myapp.csproj"
    COPY . .
    WORKDIR "/src/myapp/"
    RUN dotnet build "myapp.csproj" -c Release -o /app/build
    FROM build AS publish
    RUN dotnet publish "myapp.csproj" -c Release -o /app/publish
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "myapp.dll"]
    
  • 构建图像

    docker build -t myapp .
    
  • 运行docker图像:

    docker run myapp -p 5000:5000
    

使用特定的docker文件运行上面的命令会导致以下结果:

[21:28:42 INF] Starting host.
[21:28:42 INF] Now listening on: http://[::]:5000
[21:28:42 INF] Application started. Press Ctrl+C to shut down.
[21:28:42 INF] Hosting environment: Production
[21:28:42 INF] Content root path: /app

但是,我无法使用访问容器http://localhost:5000/swagger/index.html由于ERR_CONNECTION_REFUSED->无法访问此网站。

我确实进入容器检查主机是否确实在运行,使用:

docker exec -it containerId /bin/bash
cd /app
dotnet myapp.dll

是什么导致了以下错误:

Unable to start Kestrel.
System.IO.IOException: Failed to bind to address http://[::]:5000: address already in use.

结论是,容器内部的端口已被使用,应用程序是活动的,只是无法从外部访问。我不知道该怎么进去。请给我指正确的方向。

更新问题已解决,答案如下。然而,解释为什么需要它以及它是如何工作的将是很好的!

为了解决这个问题,我不得不手动添加&quot--server.uls";到如下所示的入口点:

ENTRYPOINT ["dotnet", "myapp.dll", "--server.urls", "https://+:5000"]

我通过以下方式解决了相同的问题:

  1. appsettings.json中添加以下内容以强制Kestrel监听端口80
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://+:80"
}
}
}
  1. 暴露dockerfile中的端口
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80
ENTRYPOINT ["dotnet", "EntryPoint.dll"]
  1. 使用以下命令运行容器
docker run -p 8080:80 <image-name>:<tag>
  1. http://localhost:8080/上曝光的应用程序

最新更新