簡體   English   中英

ASP.NET Core 在 docker build 之前運行 angular build

[英]ASP.NET Core run angular build before docker build

我們有一個基本的 Docker 文件,它需要構建我們的 ASP.NET Core 應用程序。 我們的前端是一個 Angular2。

在我們目前的流程中,我們這樣做:

  • npm run build :構建 angular2 前端部分,將輸出 JS 文件寫入/wwwroot 這些文件將包含在 ASP.NET Core 視圖和控制器中。
  • 然后我們docker build來構建和封裝我們的 ASP.NET Core 項目。 然后我們打算將它部署到任何地方。

我們的 DockerFile:

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

我們的問題

如何在我們的 dockerfiles 步驟中添加:

  • 為我們的 Angular2 前端運行npm install所需的文件。 我們的package.json文件位於 ASP.NET 項目根目錄。
  • 運行npm run build:prod :它構建 Angular2 項目並在 wwwroot 中生成文件。

在運行dotnet build之前。 我們試圖簡單地嘗試在RUN ["dotnet", "build"]之前指示這些命令:

RUN npm install
RUN npm install -g angular-cli
RUN npm run build:prod

但是 Azure 返回一個“意外錯誤”,沒有更多細節。

無法直接從 docker 文件運行 npm 命令,docker 引擎需要一個類似 shell 或 powershell 的程序來執行 npm 命令。 這就是 docker 文件中的 coomand RUN npm install不起作用的原因。

您可以嘗試指定用於運行 npm 命令的 powershell

RUN powershell -NoProfile -Command RUN npm install

我建議如下替代選項

在解決方案的根目錄中,使用 npm 命令、dotnet restore、build、publish 和 run 命令創建構建腳本build.sh

#!bin/bash
set -e
npm install
npm install -g angular-cli
npm run build:prod
dotnet restore
dotnet test test/WebTests/project.json
dotnet publish src/Web/project.json -c release -o $(pwd)/publish/web
dotnet run

注意: 1.上面的build.sh只是一個示例,根據您的需要添加刪除和編輯。

2.確保文件 build.sh 沒有特定於 Windows 的行結尾,否則 shell 將無法執行它。

從您的解決方案的根目錄,打開您的 power shell 提示符現在我們可以直接使用 aspnetcore 構建映像來運行應用程序,如下所示

docker run -it --rm -v "$pwd\:/sln" microsoft/aspnetcore-build:1.0.1 sh ./build.sh

選項-v "$pwd\\:/sln"將當前目錄掛載為容器中的 /sln 目錄。

參考一篇寫得很好的 MSDN 文章優化 Docker 鏡像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM