如何将'npm install'集成到ASP.NET CORE 2.1 Docker构建中

dan*_*yyy 14 npm docker dockerfile asp.net-core

我没有找到一种方法来构建ASP.NET Core 2.1 Docker镜像,同时npm install在构建过程中正确执行.

Dockerfile看起来像这样(一个从Visual Studio生成的):

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY --from=frontend . .
COPY ["myProject.WebUi/myProject.WebUi.csproj", "myProject.WebUi/"]
COPY ["myProject.SearchIndex/myProject.SearchIndex.csproj", "myProject.SearchIndex/"]
COPY ["myProject.SearchIndex.Common/myProject.SearchIndex.Common.csproj", "myProject.SearchIndex.Common/"]

RUN dotnet restore "myProject.WebUi/myProject.WebUi.csproj"
COPY . .
WORKDIR "/src/myProject.WebUi"
RUN dotnet build "myProject.WebUi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "myProject.WebUi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myProject.WebUi.dll"]
Run Code Online (Sandbox Code Playgroud)

在之前的微软图片(例如aspnetcore-build:2.0)中提供了第三方工具,如npm,yarn,bower,pip,...)

目前我npm install在项目文件夹中做了一个本地.但对于像Docker Hub或Azure Container Registry提供的自动构建,缺少笔记模块.

dan*_*yyy 24

找到解决方案:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY --from=frontend . .
COPY ["myProject.WebUi/myProject.WebUi.csproj", "myProject.WebUi/"]
COPY ["myProject.SearchIndex/myProject.SearchIndex.csproj", "myProject.SearchIndex/"]
COPY ["myProject.SearchIndex.Common/myProject.SearchIndex.Common.csproj", "myProject.SearchIndex.Common/"]

RUN dotnet restore "myProject.WebUi/myProject.WebUi.csproj"
COPY . .
WORKDIR "/src/myProject.WebUi"
RUN apt-get update -yq && apt-get upgrade -yq && apt-get install -yq curl git nano
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs build-essential
RUN npm install -g npm
RUN npm install
RUN dotnet build "myProject.WebUi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "myProject.WebUi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myProject.WebUi.dll"]
Run Code Online (Sandbox Code Playgroud)

  • 看来Debian 9(stretch)的默认`nodejs` apt软件包不包含`npm`。Node在不同的OS上有[详细的安装说明](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)。 (3认同)

Sha*_*tin 22

使用 SPA 更新 ASP.NET Core 3.0 Web 应用程序

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# Prevent 'Warning: apt-key output should not be parsed (stdout is not a terminal)'
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1

# install NodeJS 13.x
# see https://github.com/nodesource/distributions/blob/master/README.md#deb
RUN apt-get update -yq 
RUN apt-get install curl gnupg -yq 
RUN curl -sL https://deb.nodesource.com/setup_13.x | bash -
RUN apt-get install -y nodejs

# copy csproj and restore as distinct layers
COPY *.sln .
COPY MyApplication/*.csproj ./MyApplication/
RUN dotnet restore

# copy everything else and build app
COPY MyApplication/. ./MyApplication/
WORKDIR /app/MyApplication
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/MyApplication/out ./
ENTRYPOINT ["dotnet", "MyApplication.dll"]
Run Code Online (Sandbox Code Playgroud)

然后

docker build --pull -t MyApplication
docker run --name myapp --rm -it -p 8000:80 MyApplication
Run Code Online (Sandbox Code Playgroud)

该应用程序将在localhost:8000


Emi*_*nge 7

就我而言,我需要一个运行 NodeJS 项目的 docker 映像,该项目能够执行“dotnet xxx.xxx.dll”等脚本。

我正在努力尝试修复 docker 内的“dotnet 命令未找到”。

我成功地通过在我的开头添加来修复它Dockerfile

FROM node:alpine AS node_base
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
COPY --from=node_base . .

RUN echo "NODE Version:" && node --version
RUN echo "NPM Version:" && npm --version
RUN echo "dotnet Version:" &&  dotnet --version
Run Code Online (Sandbox Code Playgroud)

(您可以相应调整版本)

我从这个github 问题中获得了灵感。

希望这个技巧也能帮到你:)

  • 运行行 `COPY --from=node_base 。.` 给出以下错误“无法复制到非目录:/var/lib/docker/overlay2/cxre60io3tls1hmjs5xpgd6iy/merged/var/lock”。可能出什么问题了? (5认同)