从我的项目文件创建新的Docker映像时出错

时间:2019-08-28 01:19:08

标签: c# docker asp.net-core visual-studio-2017

在Windows 10计算机上,当我尝试创建解决方案/项目的docker映像时,出现以下错误(这是完整的日志,错误结尾)

Sending build context to Docker daemon  1.363MB
Step 1/20 : FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
---> bbfbcd874370
Step 2/20 : WORKDIR /app
---> Using cache
---> 6aa13d5c0c78
Step 3/20 : EXPOSE 80
 ---> Using cache
 ---> 80df41e66b51
Step 4/20 : EXPOSE 443
 ---> Using cache
 ---> e6b48dd0ebe8
Step 5/20 : FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
 ---> 83e4b70d6dc1
Step 6/20 : ARG BuildConfiguration=Release
 ---> Using cache
 ---> 1f78c91d39f1
Step 7/20 : WORKDIR /src
 ---> Using cache
 ---> 213aa5f648e4
Step 8/20 : COPY ["NuGet.config", "."]
 ---> Using cache
 ---> d8843fccc7af
Step 9/20 : COPY ["MyProj.csproj", "ServiceProject/"]
 ---> Using cache
 ---> af245be6312e
Step 10/20 : RUN dotnet restore  --configfile NuGet.config "MyProj.csproj"
 ---> Running in 0582b332eab7
MSBUILD : error MSB1009: Project file does not exist.
Switch: MyProj.csproj
The command '/bin/sh -c dotnet restore  --configfile NuGet.config "MyProj.csproj"' returned a non-zero code: 1

Dockerfile 如下

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

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
ARG BuildConfiguration=Release
WORKDIR /src
COPY ["NuGet.config", "."]
COPY ["MyProj.csproj", "NewProj/"]
RUN dotnet restore  --configfile NuGet.config "MyProj.csproj"
COPY . .
WORKDIR "/src/MyService"
RUN dotnet build "MyProj.csproj" -c ${BuildConfiguration} -o /app --no-restore

FROM build AS publish
ARG BuildConfiguration=Release
RUN dotnet publish "MyProj.csproj" -c ${BuildConfiguration} -o /app --no-restore

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

文件夹MyProj.csproj存在 是的,我正在AdminMode中运行powershell 我也尝试过给出完整的路径,但这也没有用

我尝试了docker文档和stackoverflow,但是没有提及此错误。如果可能的话,请提供逐步的解决方案,

2 个答案:

答案 0 :(得分:2)

使用我的评论作为答案-您的最初问题是csproj文件的位置。你跑

COPY ["NuGet.config", "."]
COPY ["MyProj.csproj", "NewProj/"]

因此,MyProj.csproj位于“ NewProj /”。因此,当您运行

RUN dotnet restore  --configfile NuGet.config "MyProj.csproj"

找不到MyProj。选项是为您的项目文件提供正确的路径,或将其复制到与nuget.config相同的位置。

关于您的以下错误-似乎

  

/usr/share/dotnet/sdk/2.1.801/NuGet.targets(525,5):错误:值不能为null或空字符串。 [/src/MyProj.csproj]

     

/usr/share/dotnet/sdk/2.1.801/NuGet.targets(525,5):错误:参数   名称:用户名[/src/MyProj.csproj]

“用户名”是访问正在使用的nuget提要之一所必需的。尝试将用户名/密码添加到您的nuget.config文件-#{module_name} as variable

答案 1 :(得分:0)

在Visual Studio中创建项目/解决方案时,别名或什至不能完全理解此路径,只需选中显示启用Docker支持的框即可。这样会自动生成供您使用的docker文件,您可以避免这些问题。

enter image description here