首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问ASP.NET核心码头容器应用程序

问无法访问ASP.NET核心码头容器应用程序
EN

Stack Overflow用户
提问于 2019-06-23 19:03:32
回答 5查看 12.6K关注 0票数 4

我在MacOS上的Docker容器中运行了一个MacOS核心服务。

VisualStudioforMacv18.1.2 (build 2) .NET Core : 2.2.300

以下是Dockerfile:

代码语言:javascript
复制
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-组合文件的外观:

代码语言:javascript
复制
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/

正在运行的码头集装箱的港口看起来也不错:

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

但是,当我试图打电话给https://localhost:5254时,它说无法联系到网站。

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

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

为什么它不接受ASPNETCORE_URLS enivronment变量设置的urls呢?

我还能做些什么来排除故障来发现问题呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-06-25 19:55:08

原来这是VisualStudioforMacv18.1.2中的一个bug (docker-复合作品)

票数 0
EN

Stack Overflow用户

发布于 2019-06-24 05:08:32

不久前我遇到了你的问题,我就是这样解决的。您需要指定--server.urls作为运行参数,如下所示:

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

5000和5001是从哪里来的?

Kestrel端点配置

默认情况下,ASP.NET核心绑定到: http://localhost:5000 https://localhost:5001 (当存在本地开发证书时)

更新1:

根据您的坞-组合配置,您已经将ASPNETCORE_ENVIRONMENT设置为Development。我认为您应该将其更改为Production,因为当您启用Development时,ASP.NET Core将从launchSettings.json读取设置。

开发环境可以启用不应该在生产中公开的特性。例如,ASP.NET核心模板在开发环境中启用了开发人员异常页。

可以在项目的Properties\launchSettings.json文件中设置本地机器开发环境。launchSettings.json中设置的环境值覆盖系统环境中设置的值。

据我所知,Kestrel的默认端口是每个默认launchSettings.json中的80和443。

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

代码语言:javascript
复制
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/
票数 4
EN

Stack Overflow用户

发布于 2019-06-23 19:14:21

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

docker ps

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

docker exec -it your_container /bin/bash

cd /app

dotnet yourprojectfile.dll

然后导航:

https://localhost:5254

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56726987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档