如何在 .Net 核心项目中使用 Azure Artifacts 源创建 docker 图像

How to create docker image with Azure Artifacts feed in .Net core project

我在我的 .Net 核心网络 api 应用程序上创建 docker 图像时遇到问题。那就是 VS docker 支持生成的 docker 图像:

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

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["src/appname.Api/appname.Api.csproj", "src/appname.Api/"]
COPY ["src/appname.Data/appname.Data.csproj", "src/appname.Data/"]
COPY ["src/Eappname.Models/appname.Models.csproj", "src/appname.Models/"]
RUN dotnet restore "src/appname.Api/appname.Api.csproj"
COPY . .
WORKDIR "/src/src/appname.Api"
RUN dotnet build "appname.Api.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "appname.Api.csproj" -c Release -o /app

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

不幸的是,我在我的应用程序中使用了 Azure Artifacts Feed 包,但此图像不起作用。我做了一些研究并尝试将凭据提供程序与 nuget 配置文件一起使用。如下所示:

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

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src

COPY NuGet.Config ./
COPY ["src/appname.Api/appname.Api.csproj", "src/appname.Api/"]
COPY ["src/appname.Data/appname.Data.csproj", "src/appname.Data/"]
COPY ["src/appname.Models/appname.Models.csproj", "src/appname.Models/"]

RUN dotnet restore --configfile NuGet.Config "src/appname.Api/appname.Api.csproj"

COPY . .
WORKDIR "/src/src/appname.Api"
RUN dotnet build "appname.Api.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "appname.Api.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "appname.Api.dll"]

并添加了 Nuget.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="BredasVSTS" value="https://pkgs.dev.azure.com/feed/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <BredasVSTS>
      <add key="Username" value="<usernameWithEmail>" />      
      <add key="ClearTextPassword" value="<token>" />
    </BredasVSTS>
  </packageSourceCredentials>
</configuration>

现在我取得了一点进步,因为我能够通过步骤 11 - dotnet restore。不幸的是,在步骤 14- dotnet build 中,我收到以下错误: /bin/sh: 2: cd: can't cd to *Undefined*

有什么办法可以解决这个问题吗?

error: /bin/sh: 2: cd: can't cd to Undefined

根据错误 MSB3073: The command "cd "undefined"",您似乎在 xxx.Api 项目中使用了命令行或构建事件 cd $(SolutionDir)

当你在没有解决方案文件.sln的情况下使用dockerfile构建项目文件.csproj时,它无法获取$(SolutionDir)的值,这是基于.sln文件。

所以,你会得到错误"cd "undefined”,要解决这个问题你可以尝试替换所有$(SolutionDir)在您的项目文件中使用 $(ProjectDir)..\.

作为测试,我创建了一个包含构建事件的示例:

CD $(SolutionDir)

然后我得到了同样的错误:

为了解决这个问题,我用$(ProjectDir)..\替换了$(SolutionDir),然后构建它,它工作正常:

查看 this thread 了解更多详情。

希望对您有所帮助。