Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在docker上部署net core 2应用程序_C#_Reactjs_Docker_Docker Compose_Asp.net Core 2.0 - Fatal编程技术网

C# 在docker上部署net core 2应用程序

C# 在docker上部署net core 2应用程序,c#,reactjs,docker,docker-compose,asp.net-core-2.0,C#,Reactjs,Docker,Docker Compose,Asp.net Core 2.0,当我创建一个简单的React和Net Core 2.2时。用命令投射 dotnet new react并添加文件以在Docker上构建和部署应用程序,但Docker无法构建 我的Docker Compose文件包含: version: '3' services: netreact: container_name: netreactapp build: context: . dockerfile: Dockerfile ports:

当我创建一个简单的React和Net Core 2.2时。用命令投射
dotnet new react
并添加文件以在Docker上构建和部署应用程序,但Docker无法构建

我的Docker Compose文件包含:

version: '3'
services:
  netreact:
    container_name: netreactapp
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    restart: always
FROM microsoft/dotnet:sdk AS base
WORKDIR /app
FROM microsoft/dotnet:sdk AS build
WORKDIR /src
COPY *.sln ./
COPY MyReactApp/*.csproj ./MyReactApp/
RUN dotnet restore
WORKDIR /src/MyReactApp
RUN dotnet publish -c Release -o /app /property:PublishWithAspNetCoreTargetManifest=false
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyReactApp.dll"]
我的Dockerfile包含:

version: '3'
services:
  netreact:
    container_name: netreactapp
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    restart: always
FROM microsoft/dotnet:sdk AS base
WORKDIR /app
FROM microsoft/dotnet:sdk AS build
WORKDIR /src
COPY *.sln ./
COPY MyReactApp/*.csproj ./MyReactApp/
RUN dotnet restore
WORKDIR /src/MyReactApp
RUN dotnet publish -c Release -o /app /property:PublishWithAspNetCoreTargetManifest=false
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyReactApp.dll"]
因此,当我运行命令build and up
docker compose up-d
my docker时,它们在Npm还原时失败,出现以下错误:

Step 16/22 : RUN dotnet publish -c Release -o /app /property:PublishWithAspNetCoreTargetManifest=false
 ---> Running in dc0532c03e90
Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 276.74 ms for /src/MyReactApp/MyReactApp.csproj.
  StWebApp -> /src/MyReactApp/bin/Release/netcoreapp2.2/MyReactApp.dll
  StWebApp -> /src/MyReactApp/bin/Release/netcoreapp2.2/MyReactApp.Views.dll
  /bin/sh: 2: /tmp/tmp813c90672ba947489ab89ec17eb80722.exec.cmd: npm: not found
/src/MyReactApp/MyReactApp.csproj(48,5): error MSB3073: The command "npm install" exited with code 127.
ERROR: Service 'netreactapp' failed to build: The command '/bin/sh -c dotnet publish -c Release -o /app /property:PublishWithAspNetCoreTargetManifest=false' returned a non-zero code: 1
我认为这是因为csproj的管道试图使用npm构建ClientApp文件夹,有什么解决方法或方法可以修复它吗?

Microsoft的教程中指出,构建过程使用npm来恢复npm依赖关系并启动服务器

此外,同一文档还声明需要Node.js来进行开发构建


因此,在构建应用程序之前,您需要确保Docker映像将包含npm。

npm
未找到。生成包含节点的自定义生成映像,或在生成项目之前作为生成步骤安装节点。链接问题参考2.1,但您可以使用与当前脚本相同的基本/生成映像,并添加链接问题。@John我不认为,我已经试过了。你试的时候发生了什么?同样的错误。。。。但我正在尝试另一种策略,单独构建,然后它就可以工作了。所以我将把这个答案作为解决我问题的答案。在我的开发环境中,我安装了dotnet和npm,运行良好,我的问题是当我使用dockerIt自动化构建和部署时,无论您在开发环境中安装了什么。当您构建Docker映像时,您正在设置一个新的运行时环境,该环境需要打包所有必需的包,以便在任何系统上运行应用程序。这意味着您需要确保Dockerfile安装每个依赖项。在您的示例中,您从
microsoft/dotnet:sdk
Docker映像开始,它已经包含了所有的.NET内容,但是您仍然需要安装其余的依赖项。但是我不能这样做,我认为它可能与CSProj中存在的构建管道有关,因为在dockerfile中添加了NodeJ,我无法生成生成,是否有解决方案?@Joãocata根据您在上面给出的错误消息,管道失败,因为您的Dockerfile在调用
dotnet publish(…)
之前没有安装npm。因此,由于npm此时不在Docker映像中,因此该步骤失败。如果您在调用
dotnet publish
之前添加了几个步骤来安装npm和您的npm依赖项,那么您将看到该特定错误。但与答案链接或解释无关。