Visual studio 从VS2019发出正在运行的Docker容器

Visual studio 从VS2019发出正在运行的Docker容器,visual-studio,docker,.net-core,dockerfile,server-core,Visual Studio,Docker,.net Core,Dockerfile,Server Core,我已经构建了一个.NETCore3.0控制台应用程序,它使用Telerik生成pdf报告。Telerik利用GDI+库来实现这一点。该应用程序使用一个内部开发的dll,该dll依赖于Windows事件日志,因此不幸的是,在Linux上托管目前是不可能的 我试图在docker容器中运行此应用程序,但在使用完整图像时,我很难通过Visual Studio 2019使其正常工作。据我所知,这是唯一一个有我需要的GDI+库的图像 使用servercore:1803时,我通过Visual Studio运行

我已经构建了一个.NETCore3.0控制台应用程序,它使用Telerik生成pdf报告。Telerik利用GDI+库来实现这一点。该应用程序使用一个内部开发的dll,该dll依赖于Windows事件日志,因此不幸的是,在Linux上托管目前是不可能的

我试图在docker容器中运行此应用程序,但在使用完整图像时,我很难通过Visual Studio 2019使其正常工作。据我所知,这是唯一一个有我需要的GDI+库的图像

使用servercore:1803时,我通过Visual Studio运行时收到此错误:“无法启动程序‘C:\program Files\dotnet\dotnet.exe’。系统找不到指定的路径。”

基于容器工具和构建的日志输出,似乎一切都按预期进行

这是我完整的dockerfile。这正是Visual Studio在选择“添加-->Docker支持…”时添加的内容,但使用的图像除外。注意:当我使用3.0-nanoserver-1803时,VisualStudio按预期运行容器,但在执行需要GDI的报告生成代码时失败

FROM mcr.microsoft.com/windows/servercore:1803 AS base
#FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1803 AS base
WORKDIR /app   

FROM mcr.microsoft.com/windows/servercore:1803 AS build
#FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 AS build
WORKDIR /src
COPY ["DM.Web.Reporting.Background/DM.Web.Reporting.Background.csproj", "DM.Web.Reporting.Background/"]
RUN dotnet restore "DM.Web.Reporting.Background/DM.Web.Reporting.Background.csproj"
COPY . .
WORKDIR "/src/DM.Web.Reporting.Background"
RUN dotnet build "DM.Web.Reporting.Background.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DM.Web.Reporting.Background.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DM.Web.Reporting.Background.dll"]

我做错什么了吗?我是一个Docker noob,希望我错过了一些简单的东西。

这可能是因为您已将.NET核心运行时和SDK基础映像更改为Windows Server核心映像:

FROM mcr.microsoft.com/windows/servercore:1803 AS build
#FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 AS build
服务器核心映像中未安装.NET核心。您需要将其作为Dockerfile的一部分进行安装

我已修改您的Dockerfile,以便在运行时阶段安装.NET Core运行时,并在SDK阶段安装SDK:

FROM mcr.microsoft.com/windows/servercore:1803 AS base
#FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1803 AS base

# Install .NET Core Runtime
RUN powershell -Command \
        $ProgressPreference = 'SilentlyContinue'; \
        Invoke-WebRequest \
            -UseBasicParsing \
            -Uri https://dot.net/v1/dotnet-install.ps1 \
            -OutFile dotnet-install.ps1; \
        ./dotnet-install.ps1 \
            -InstallDir '/Program Files/dotnet' \
            -Channel 3.0 \
            -Runtime dotnet; \
        Remove-Item -Force dotnet-install.ps1 \
    && setx /M PATH "%PATH%;C:\Program Files\dotnet"

WORKDIR /app   

FROM mcr.microsoft.com/windows/servercore:1803 AS build
#FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 AS build

# Install .NET Core SDK
RUN powershell -Command \
        $ProgressPreference = 'SilentlyContinue'; \
        Invoke-WebRequest \
            -UseBasicParsing \
            -Uri https://dot.net/v1/dotnet-install.ps1 \
            -OutFile dotnet-install.ps1; \
        ./dotnet-install.ps1 \
            -InstallDir '/Program Files/dotnet' \
            -Channel 3.0; \
        Remove-Item -Force dotnet-install.ps1 \
    && setx /M PATH "%PATH%;C:\Program Files\dotnet"

WORKDIR /src
COPY ["DM.Web.Reporting.Background/DM.Web.Reporting.Background.csproj", "DM.Web.Reporting.Background/"]
RUN dotnet restore "DM.Web.Reporting.Background/DM.Web.Reporting.Background.csproj"
COPY . .
WORKDIR "/src/DM.Web.Reporting.Background"
RUN dotnet build "DM.Web.Reporting.Background.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DM.Web.Reporting.Background.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DM.Web.Reporting.Background.dll"]
有关如何使用dotnet安装脚本的更多详细信息,请参阅

更新:


有关如何在Dockerfile(Linux或Windows)中安装.NET Core的更多通用说明,请参阅。

我的笔记本电脑禁用了TLS 1.0,因此我必须添加[System.NET.ServicePointManager]::SecurityProtocol=[System.NET.SecurityProtocolType]::Tls12;\作为调用WebRequest之前的行。在添加后,它按预期工作!你就是那个人!