繁体   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