无法访问ASP.NET Core Docker容器应用

时间:2019-06-23 19:03:32

标签: docker asp.net-core https

我在MacOS的Docker容器中运行ASP.NET Core服务。
Visual Studio for Mac v18.1.2(内部版本2) .NET Core SDK:2.2.300

这是Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /
COPY src/Services/Service.API/Service.API.csproj src/Services/Service.API/
RUN dotnet restore src/Services/Service.API/Service.API.csproj
COPY . .
WORKDIR /src/Services/Service.API
RUN dotnet build Service.API.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish Service.API.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll"]

以下是该服务的docker-compose文件的样子:

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/

正在运行的Docker容器的端口也看起来不错:

  

0.0.0.0:5204-> 80 / tcp,0.0.0.0:5254->443/tcp

但是当我尝试致电https://localhost:5254时,它说无法访问该站点。

在输出中,我还会看到以下警告:

  

警告:Microsoft.AspNetCore.Server.Kestrel [0]         无法绑定至IPv6环回接口上的https://localhost:5001:“无法分配请求的地址”。   Microsoft.AspNetCore.Server.Kestrel:警告:无法绑定到   IPv6回送接口上的https://localhost:5001:“无法分配   要求的地址”。托管环境:开发内容根   路径:/ app现在正在收听:https://localhost:5001

为什么不使用ASPNETCORE_URLS环境变量设置的网址?

我还可以做些什么来进行故障排除以发现问题?

5 个答案:

答案 0 :(得分:0)

首先,检查您的容器是否已启动并运行:

docker ps

如果正在运行,则可能无法启动容器内的Kestrel。您可能需要检查入口点,容器中的Linux区分大小写。在这种情况下,请尝试手动运行您的应用。首先,通过以下方式进入容器:

docker exec -it your_container /bin/bash

cd /app

dotnet yourprojectfile.dll

然后导航:

https://localhost:5254

答案 1 :(得分:0)

我前一段时间遇到了您的问题,这就是我解决问题的方式。您需要将--server.urls指定为运行参数,如下所示:

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll", "--server.urls", "http://+:80;https://+:443"]

50005001来自哪里?

Kestrel Endpoint configuration

  

默认情况下,ASP.NET Core绑定到:

     

http://localhost:5000

     

https://localhost:5001(本地开发时   证书存在)

更新1:

根据docker-compose配置,您已将ASPNETCORE_ENVIRONMENT设置为Development。我认为您应该将其更改为Production,因为启用DevelopmentASP.NET Core将从launchSettings.json读取设置。

开发环境可以启用不应在生产中公开的功能。例如,ASP.NET Core模板在开发环境中启用“开发人员例外页面”。

  

可以在   项目的Properties \ launchSettings.json文件。环境价值   在launchSettings.json中设置的值将覆盖系统中设置的值   环境。

据我所记得,每个默认Kestrel80的默认端口是443launchSettings.json

如果需要在Docker上以development模式运行项目,则应在launchSettings.json内更改配置,但我认为不建议这样做,最好将模式更改为Production。 / p>

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Production
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/

答案 2 :(得分:0)

对于您当前的docker-compose.yml,您是直接引用现有映像service.api:${TAG:-latest},而不是使用dockerfile中生成的映像。

删除此行image: service.api:${TAG:-latest}

version: '3'
services:
  service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/

答案 3 :(得分:0)

结果证明这是Visual Studio for Mac v18.1.2中的一个错误(docker编写了作品)

答案 4 :(得分:0)

基本上,在 asp.net 核心代码中,它只侦听 Container 中的 localhost,而不侦听您的本地 pc。您可以通过更新设置以侦听“http://*:5000”而不是“http://localhost:5000”来解决此问题。

这里详细说明原因和解决方法。 https://stackoverflow.com/a/65953771/8918445