从2019年7月24日开始的更新见本文结尾。
自2018年11月1日更新{
感谢评论中的帮助,以下是意识形态上更正确的Docker文件版本。
标准的Angular SPA模板项目模板包含错误。 net .core 2.1版本中的开发人员。 从microsoft / dotnet中删除:用于构建nodejs的2.1-sdk映像,但使用该映像的代码保留在项目文件中。 在此处阅读更多信息
github.com/aspnet/Announcements/issues/298您必须通过删除以下代码来手动编辑* .csproj项目文件
从* .csproj中删除的代码<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish"> <!-- As part of publishing, ensure the JS resources are freshly built in production mode --> <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " /> <!-- Include the newly-built files in the publish output --> <ItemGroup> <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" /> <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" /> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <RelativePath>%(DistFiles.Identity)</RelativePath> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </ResolvedFileToPublish> </ItemGroup> </Target>
正确的dockerfile ARG NODE_IMAGE=node:8.12 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY . . WORKDIR "/src/AngularWebApp" FROM ${NODE_IMAGE} as node-build WORKDIR /src COPY AngularWebApp/ClientApp . RUN npm install RUN npm run build -- --prod FROM build AS publish RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . COPY --from=node-build /src/dist ./ClientApp/dist ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
}
不幸的是,我在任何地方都找不到现成的解决方案。 我不得不从多个来源收集信息。 将其作为ASP .NET Core上的项目在Angular 6/7 docker中启动应用程序。
如果我们使用标准工具为具有Angular应用程序的项目启用docker支持,则docker文件将基于Microsoft / dotnet创建一个应用程序映像:2.1-aspnetcore-runtime映像。 此基本映像中不包含node.js服务器 执行的结果将是ASP .NET Core错误
An unhandled exception occurred while processing the request. The NPM script 'start' exited without indicating that the Angular CLI was listening for requests

要解决此错误,您需要通过添加安装node.js和angular来更新Docker文件。
此外,由于开发是在Windows下进行的,并且都在基于Ubunty的Docker容器中启动,因此,如果使用scss或sass样式文件,则它们会由Angular CLI使用node-sass进行编译,并且在启动时会出现错误“ Node Sass not仍支持您当前的环境:具有不受支持的运行时的Windows 64位。 您必须运行以下命令:
npm rebuild node-sass
npm将下载当前平台所需的脚本并重建css文件。
基于ASP .NET Core 2.1项目的Angular应用程序的最终Docker文件如下
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base # Setup NodeJs RUN apt-get update && \ apt-get install -y wget && \ apt-get install -y gnupg2 && \ wget -qO- https://deb.nodesource.com/setup_8.x | bash - && \ apt-get install -y build-essential nodejs RUN npm install @angular/cli -g # End setup WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY . . WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . WORKDIR /app/ClientApp RUN npm install RUN npm rebuild node-sass WORKDIR /app ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
我使用了稳定的LTS版本的Node.js(当前为8.x),但可以将其更改为更相关的版本。
此外,我还注意到Windows宽恕了与其他大小写字符相关的错误,但是Linux并不宽恕。 在开发过程中工作的项目将拒绝在容器中进行编译,从而产生错误
docker ERROR in error TS1149: File name 'filename.ts' differs from already included file name 'FileNames.ts' only in casing
为了即使在编译阶段也要避免此类错误,我建议将适当的选项“ forceConsistentCasingInFileNames”:true添加到compileOptions部分中的tsconfig.json文件中。
{ "compilerOptions": { "forceConsistentCasingInFileNames": true } } }
自2019年7月24日起更新{
同样,
感谢注释中
的帮助 ,下面提供了docker文件的优化版本。
优化的dockerfile ARG NODE_IMAGE=node:10.16.0 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY . . WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM ${NODE_IMAGE} as node-build WORKDIR /src COPY AngularWebApp/ClientApp . RUN npm install RUN npm rebuild node-sass RUN npm run build -- --prod FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80 COPY --from=build /app . COPY --from=node-build /src/dist ./ClientApp/dist ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
}
角,angular6 / 7,asp .net core 2.1,码头工人