11/01/2018からの更新{
コメント内の助けのおかげで、以下はdockerファイルのよりイデオロギー的に正しいバージョンです。
標準のAngular SPA Templateプロジェクトテンプレートにはエラーが含まれています。 バージョン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 imageに基づいてアプリケーションイメージを作成します。 このベースイメージには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スタイルファイルが使用されている場合、それらはnode-sassを使用してAngular CLIによってコンパイルされ、開始時に「Node Sass does 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"]
Node.jsの安定版LTSリリース(現在は8.x)を使用しましたが、より適切なものに変更できます。
さらに、Windowsは文字の異なるケースに関連するエラーを許容しますが、Linuxはこれを許しません。 また、開発中に機能したプロジェクトは、コンテナでのコンパイルを拒否し、エラーが発生します
docker ERROR in error TS1149: File name 'filename.ts' differs from already included file name 'FileNames.ts' only in casing
コンパイル段階でこのようなエラーを回避するには、compilerOptionsセクションのtsconfig.jsonファイルに対応するオプション「forceConsistentCasingInFileNames」:trueを追加することをお勧めします
{ "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コア2.1、ドッカー