我们有一个基本的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步骤中添加:
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返回一个"意外错误"没有更多细节。
答案 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