docker - .NET Core Docker Image 似乎没有安装 node.js
问题描述
我有一个 ASP.NET Core 项目,我想使用 Docker 对其进行容器化。创建/构建图像的过程似乎没问题,但是当 ASP.NET 应用程序在容器内运行时,我可以在控制台中看到一些异常消息 (AggregateException):
Application startup exception: System.AggregateException: One or more errors occurred. (Failed to start Node process. To resolve this:.
[1] Ensure that Node.js is installed and can be found in one of the PATH directories.
Current PATH enviroment variable is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Make sure the Node executable is in one of those directories, or update your PATH.
[2] See the InnerException for further details of the cause.) ---> System.InvalidOperationException: Failed to start Node process.
它似乎无法从 PATH 中找到 Node,但我添加了一个命令以确保将安装 node.js。
这是我的 Dockerfile:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS Base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update -yq \
&& apt-get install curl gnupg -yq \
&& curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get install nodejs -yq
FROM microsoft/dotnet:2.2-sdk as build
# Restore dotnet before build to allow for caching
WORKDIR /
COPY MyProject.Common/MyProject.Common.csproj /src/MyProject.Common/
COPY MyProject.Data/MyProject.Data.csproj /src/MyProject.Data/
COPY MyProject.DomainClasses/MyProject.DomainClasses.csproj /src/MyProject.DomainClasses/
COPY MyProject.Services/MyProject.Services.csproj /src/MyProject.Services/
COPY MyProject.Tests/MyProject.Tests.csproj /src/MyProject.Tests/
COPY MyProject.ViewModel/MyProject.ViewModel.csproj /src/MyProject.ViewModel/
COPY MyProject.Web/MyProject.Web.csproj /src/MyProject.Web/
RUN dotnet restore /src/MyProject.Web/MyProject.Web.csproj
# Copy source files and build
COPY . /src
RUN dotnet build /src/MyProject.Web/MyProject.Web.csproj --no-restore -c Release
RUN dotnet publish /src/MyProject.Web/MyProject.Web.csproj --no-restore -c Release -o /app
# Copy compiled app to runtime container
FROM base AS final
COPY --from=build /app .
RUN npm install
CMD ["dotnet", "MyProject.Web.dll"]
PS:Dockerfile 在MyProject.Web
项目内部。
解决方案
问题是docker-compose
文件中环境变量的值不正确,它使用了环境Development
值,ASPNETCORE_ENVIRONMENT
因为我的 Startup 类中有以下代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
我把它改成了Production
现在它工作得很好:
environment:
- ASPNETCORE_ENVIRONMENT=Production
推荐阅读
- oracle - 这个 PL/SQL 函数有什么问题?
- jquery - JQuery 验证远程函数不显示验证消息
- wordpress - WordPress Twilio Webhook JSON 问题
- typescript - 在 TypeScript 中扩展另一种类型的任何类型的参数?
- installshield - 在 InstallShield 主进程之前预安装 exe 文件
- excel - 如何在 vba 代码中添加或减去从访问中读取的值?
- node.js - 通过 wifi 与设备通信
- swift - 为什么为 UITableViewDiffableDataSource cellProvider 参数返回 nil tableViewCell?
- c# - 固定行数后,将数据表行拆分为两列
- laravel - 从 laravel 项目创建 docker 映像时作曲家的问题