我正在嘗試將 ASP.NET Core & Angular 應用程式容器化,但遇到了一些麻煩。
我收到這些錯誤:
=> [internal] load build definition from Dockerfile 0.4s
=> => transferring dockerfile: 872B 0.1s
=> [internal] load .dockerignore 0.4s
=> => transferring context: 35B 0.0s
=> [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0 0.5s
=> [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0 0.0s
=> [base 1/7] FROM mcr.microsoft.com/dotnet/aspnet:5.0 0.0s
=> [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:5.0@sha256:b69acf0a0734d77827d4e7ce22421256a64d490bb3ce988b21c4 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 3.17kB 0.0s
=> CACHED [base 2/7] WORKDIR /app 0.0s
=> CACHED [base 3/7] RUN apt-get -y update 0.0s
=> CANCELED [base 4/7] RUN apt-get -y upgrade 5.6s
=> CACHED [build 2/7] WORKDIR /src 0.0s
=> CACHED [build 3/7] COPY [mediere.csproj, .] 0.0s
=> CACHED [build 4/7] RUN dotnet restore "./mediere.csproj" 0.0s
=> CACHED [build 5/7] COPY . . 0.0s
=> CACHED [build 6/7] WORKDIR /src/. 0.0s
=> CACHED [build 7/7] RUN dotnet build "mediere.csproj" -c Release -o /app/build 0.0s
=> ERROR [publish 1/1] RUN dotnet publish "mediere.csproj" -c Release -o /app/publish 4.7s
------
> [publish 1/1] RUN dotnet publish "mediere.csproj" -c Release -o /app/publish:
#21 1.567 Microsoft (R) Build Engine version 16.11.2 f32259642 for .NET
#21 1.567 Copyright (C) Microsoft Corporation. All rights reserved.
#21 1.567
#21 2.460 Determining projects to restore...
#21 2.852 All projects are up-to-date for restore.
#21 3.883 mediere -> /src/bin/Release/net5.0/mediere.dll
#21 3.894 mediere -> /src/bin/Release/net5.0/mediere.Views.dll
#21 4.006 /bin/sh: 2: /tmp/tmp045a9cb1e4954d54b304a781ae210094.exec.cmd: npm: not found
#21 4.011 /src/mediere.csproj(38,5): error MSB3073: The command "npm install" exited with code 127.
------
executor failed running [/bin/sh -c dotnet publish "mediere.csproj" -c Release -o /app/publish]: exit code: 1
我的 dockerfile 是這樣的:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 5000
#EXPOSE 5001
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt install -y curl
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs build-essential
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["mediere.csproj", "."]
RUN dotnet restore "./mediere.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "mediere.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "mediere.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "mediere.dll"]
我希望它能夠作業,因為我正在第 12 行安裝 npm。
我觀察到的是發布任務和 apt-get install 任務同時作業,我認為發布在 apt-get install 之前進行,這就是它不起作用的原因。不過我可能是錯的。
我該如何解決這個錯誤?
謝謝。
uj5u.com熱心網友回復:
每個 Dockerfile 構建階段都會啟動FROM其他一些鏡像。在您使用 Node 時,構建階段是
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
...
FROM build AS publish
RUN dotnet publish "mediere.csproj" -c Release -o /app/publish
在這個特定的包序列中,從 .NET SDK 映像開始到您運行的點dotnet publish,但這從未真正安裝 Node.js。
在您安裝 Node 的地方,它處于base映像階段。這包含在final映像中,但不包含在任何中間構建步驟中。
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
RUN apt-get install -y nodejs
FROM base AS final
如果您將 Angular 應用程式構建到靜態檔案中,然后從 .NET 應用程式提供它,那么您只需要在構建和發布階段使用 Node,而在最終應用程式中不需要。我建議在FROM ... AS build線路之后立即安裝它,尤其是在您將COPY任何內容放入影像之前。如果由于代碼更改而重建映像,這將避免重新安裝 Node。
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
# do not install Node here
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
# Do install Node
# The default version in the Debian repositories should be fine
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
build-essential \
nodejs
# Build your application as before
WORKDIR /src
...
FROM build AS publish
# Will include Node, because the `FROM ... AS build` stage installed it
FROM base AS final
# Will not include Node, because the `FROM ... AS base` stage did not
# install it
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/463065.html
