ASP.NET Core在docker build之前运行角度构建

时间:2017-01-12 15:54:33

标签: azure angular docker asp.net-core

我们有一个基本的Docker文件,需要构建我们的ASP.NET Core应用程序。我们的前端是一个Angular2。

在我们目前的流程中,我们会这样做:

  • npm run build:构建angular2前端部分,写入输出 /wwwroot中的JS文件。这些文件将包含在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:在wwwroot中构建Angular2项目和生成的文件。

在运行dotnet build之前。我们试图在RUN ["dotnet", "build"]之前尝试指出这些命令:

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

但Azure返回一个"意外错误"没有更多细节。

1 个答案:

答案 0 :(得分:1)

无法直接从docker文件运行npm命令,docker引擎需要像shell或powershell这样的程序来执行npm命令。这就是docker文件中的coomand RUN npm install不起作用的原因。

您可以尝试指定用于运行npm命令的powershell

RUN powershell -NoProfile -Command RUN npm install

我建议使用下面的替代选项

在解决方案的根目录中,使用npm命令,dotnet恢复,构建,发布和运行命令创建构建脚本 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没有特定于窗口的行结尾,否则shell将无法执行它。

从解决方案的根目录打开电源shell提示符 现在我们可以直接使用aspnetcore构建映像来运行应用程序,如下所示

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

选项-v "$pwd\:/sln"将当前目录挂载到容器中的/ sln目录。

请参阅编写得非常好的MSDN文章Optimized Docker Images