【问题标题】:docker compose aspnetcore build vs dotnet rundocker compose aspnetcore build vs dotnet run
【发布时间】:2020-12-23 08:50:43
【问题描述】:

通过 docker (compose) 运行 dotnetcore 应用程序不会像通过“dotnet run”那样解决。

我使用 dotnet build 运行它,dotnet run 它出现“正在侦听 https://localhost:44301”并将其放入我引用的 Debug 文件夹中。来自 docker 的相同目录显示“正在侦听 https://[::]:44301”,但尝试进入站点启动页面时出现 500 错误。

这是我当前的 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1
COPY mydir/myproj /app
WORKDIR /app

RUN dotnet restore -nowarn:3202,nu1503 -p:RestoreUseSkipNonexistantTargets=false 

RUN dotnet build 
EXPOSE 44301/tcp
ENV ASPNETCORE_URLS=https://*:44301

WORKDIR /app/bin/Debug/netcoreapp3.1/
ENTRYPOINT ["dotnet", "myproj.dll"]

这实际上是当前尝试调试此问题的文件。任何“解决”差异的帮助将不胜感激。

【问题讨论】:

    标签: docker asp.net-core https


    【解决方案1】:

    试试这个,您需要将 {APPFOLDER} 和 {DLLNAME} 替换为您的设置:

        FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
        WORKDIR /app
        COPY ./{APPFOLDER} .
        WORKDIR /openssl
        COPY ./somecert.pfx .
        
        WORKDIR /app/{APPFOLDER}/
        RUN dotnet publish -c Release -r linux-x64 -o out /p:publishsinglefile=true /p:publishtrimmed=true
        
        FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1 AS runtime
        WORKDIR /openssl
        COPY --from=build /openssl/somecert.pfx ./    
        WORKDIR /app
        COPY --from=build /app/{APPFOLDER}/out ./
        ENTRYPOINT ["./{DLLNAME}"]
    

    然后您可以使用它来构建它:

    docker build -f .\Dockerfile C:\Git\WHEREMYAPPIS\ -t somename/myapp:latest
    

    然后运行它:

    docker run -p 5100:80 somename/myapp:latest
    
    
    WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options =>
        {
            options.Listen(IPAddress.Loopback, 5000);  // http:localhost:5000
            options.Listen(IPAddress.Any, 80);         // http:*:80
            options.Listen(IPAddress.Loopback, 443, listenOptions =>
            {
                listenOptions.UseHttps("certificate.pfx", "password");
            });
        })
        .UseStartup<Startup>()
        .Build();
    

    【讨论】:

    • 我想保留它 https,但我知道这是我的问题,因为我只在下载的其他 https dotnetcore 应用程序示例中遇到同样的问题。我不再认为这是我的 dockerfile,而是 docker 处理 https 的东西。
    • 在这种情况下,您需要放入 https 证书。
    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2017-07-09
    • 2023-03-07
    • 1970-01-01
    • 2019-07-22
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多