我在MacOS上的Docker容器中运行了一个MacOS核心服务。
VisualStudioforMacv18.1.2 (build 2) .NET Core : 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-组合文件的外观:
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呢?
我还能做些什么来排除故障来发现问题呢?
发布于 2019-06-25 19:55:08
原来这是VisualStudioforMacv18.1.2中的一个bug (docker-复合作品)
发布于 2019-06-24 05:08:32
不久前我遇到了你的问题,我就是这样解决的。您需要指定--server.urls作为运行参数,如下所示:
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll", "--server.urls", "http://+:80;https://+:443"]5000和5001是从哪里来的?
默认情况下,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。
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/发布于 2019-06-23 19:14:21
首先,检查您的容器是否已启动并运行:
docker ps
如果它正在运行,容器内的Kestrel可能不会启动。您可能需要检查您的入口点,容器中的Linux是区分大小写的。在这种情况下,尝试运行您的应用程序手动。首先,通过以下方法进入容器:
docker exec -it your_container /bin/bash
cd /app
dotnet yourprojectfile.dll
然后导航:
https://stackoverflow.com/questions/56726987
复制相似问题