"An assembly specified in the application dependencies manifest was not found" 使用 docker
"An assembly specified in the application dependencies manifest was not found" using docker
我正在尝试使用以下 dockerfile 对 an angular aspnet core 2.2 webapi
进行 docker 化:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2.105 AS build
WORKDIR /src
# Copy csproj and restore as distinct layers
COPY ["Fightplan_v1/Fightplan_v1.csproj", "Fightplan_v1/"]
COPY ["Fightplan_v1.Autogenerate/Fightplan_v1.Autogenerate.csproj", "Fightplan_v1.Autogenerate/"]
COPY ["Fightplan_v1.Autogenerate.Test/Fightplan_v1.Autogenerate.Test.csproj", "Fightplan_v1.Autogenerate.Test/"]
COPY ["Fightplan_v1.Database/Fightplan_v1.Database.csproj", "Fightplan_v1.Database/"]
COPY ["Fightplan_v1.Helpers/Fightplan_v1.Helpers.csproj", "Fightplan_v1.Helpers/"]
COPY ["Fightplan_v1.Jobs/ConvertImagestoBlob/Fightplan_v1.ConvertImagestoBlob.csproj", "Fightplan_v1.Jobs/ConvertImagestoBlob/"]
COPY ["Fightplan_v1.Models/Fightplan_v1.Models.csproj", "Fightplan_v1.Models/"]
COPY ["Fightplan_v1.Shared/Fightplan_v1.Shared.csproj", "Fightplan_v1.Shared/"]
RUN dotnet restore "Fightplan_v1/Fightplan_v1.csproj"
# Copy everything else and build
COPY . .
WORKDIR "/src/Fightplan_v1"
RUN dotnet build "Fightplan_v1.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "Fightplan_v1.dll"]
使用的构建命令是:
docker build -f .\fp.dockerfile -t test .
构建过程顺利,但是当我尝试 运行 它时使用:
docker run -p 5100:80 -it test
我收到以下错误:
我试过:
- 将
-r linux-x64
添加到发布的末尾以定义运行时间:RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app -r linux-x64
- 正在将
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
添加到我的 .csproj
文件中
不幸的是,None 上述修复有效。
由于这是一个 angular 应用程序和一个 webapi 的组合项目,我可能会遗漏一些 installations/dependencies?
您正在从错误的层复制运行时间文件
COPY --from=build /app .
尝试改成
COPY --from=publish /app .
此外,您可能需要在构建和发布步骤中分离出路径:
RUN dotnet build "Fightplan_v1.csproj" -c Release -o /app/build
RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app/publish
然后从发布文件夹运行复制时间文件
COPY --from=publish /app/publish .
编辑。 基本上,您需要将 publish
个工件复制到 运行 时间,而不是 build
。构建将生成 deps.json,它将列出所有外部依赖项,并且在 运行 期间,此库使用 NuGet 缓存进行解析,如果它为空,您将看到错误。要将依赖项与项目文件一起复制,您需要 运行 publish
。
所以我假设,理论上 dotnet build
可以省略,并且仅用于发现 docker build.
早期阶段的编译错误
我正在尝试使用以下 dockerfile 对 an angular aspnet core 2.2 webapi
进行 docker 化:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2.105 AS build
WORKDIR /src
# Copy csproj and restore as distinct layers
COPY ["Fightplan_v1/Fightplan_v1.csproj", "Fightplan_v1/"]
COPY ["Fightplan_v1.Autogenerate/Fightplan_v1.Autogenerate.csproj", "Fightplan_v1.Autogenerate/"]
COPY ["Fightplan_v1.Autogenerate.Test/Fightplan_v1.Autogenerate.Test.csproj", "Fightplan_v1.Autogenerate.Test/"]
COPY ["Fightplan_v1.Database/Fightplan_v1.Database.csproj", "Fightplan_v1.Database/"]
COPY ["Fightplan_v1.Helpers/Fightplan_v1.Helpers.csproj", "Fightplan_v1.Helpers/"]
COPY ["Fightplan_v1.Jobs/ConvertImagestoBlob/Fightplan_v1.ConvertImagestoBlob.csproj", "Fightplan_v1.Jobs/ConvertImagestoBlob/"]
COPY ["Fightplan_v1.Models/Fightplan_v1.Models.csproj", "Fightplan_v1.Models/"]
COPY ["Fightplan_v1.Shared/Fightplan_v1.Shared.csproj", "Fightplan_v1.Shared/"]
RUN dotnet restore "Fightplan_v1/Fightplan_v1.csproj"
# Copy everything else and build
COPY . .
WORKDIR "/src/Fightplan_v1"
RUN dotnet build "Fightplan_v1.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "Fightplan_v1.dll"]
使用的构建命令是:
docker build -f .\fp.dockerfile -t test .
构建过程顺利,但是当我尝试 运行 它时使用:
docker run -p 5100:80 -it test
我收到以下错误:
我试过:
- 将
-r linux-x64
添加到发布的末尾以定义运行时间:RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app -r linux-x64
- 正在将
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
添加到我的.csproj
文件中
None 上述修复有效。
由于这是一个 angular 应用程序和一个 webapi 的组合项目,我可能会遗漏一些 installations/dependencies?
您正在从错误的层复制运行时间文件
COPY --from=build /app .
尝试改成
COPY --from=publish /app .
此外,您可能需要在构建和发布步骤中分离出路径:
RUN dotnet build "Fightplan_v1.csproj" -c Release -o /app/build
RUN dotnet publish "Fightplan_v1.csproj" -c Release -o /app/publish
然后从发布文件夹运行复制时间文件
COPY --from=publish /app/publish .
编辑。 基本上,您需要将 publish
个工件复制到 运行 时间,而不是 build
。构建将生成 deps.json,它将列出所有外部依赖项,并且在 运行 期间,此库使用 NuGet 缓存进行解析,如果它为空,您将看到错误。要将依赖项与项目文件一起复制,您需要 运行 publish
。
所以我假设,理论上 dotnet build
可以省略,并且仅用于发现 docker build.