【问题标题】:Deploy on docker a net core 2 application [duplicate]在docker上部署一个net core 2应用程序[重复]
【发布时间】:2019-09-03 19:06:03
【问题描述】:

当我创建一个简单的 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

我的 Dockerfile 包含:

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"]

因此,当我运行命令来构建和构建 docker-compose up -d 我的 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 文件夹,有任何解决方法或方法可以解决它吗?

【问题讨论】:

  • npm 未找到。构建包含 Node 的自定义构建映像,或者在构建项目之前将 Node 作为构建步骤安装。
  • 链接的问题是指 2.1,但您可以使用与当前脚本相同的基础/构建图像,并结合链接问题的添加。
  • @John 我不认为,我已经尝试过了。
  • 你尝试的时候发生了什么?
  • 同样的错误....但我正在尝试另一种策略,单独构建并且它有效。所以我会把这个答案作为解决我问题的答案。

标签: c# reactjs docker docker-compose asp.net-core-2.0


【解决方案1】:

Microsoft 在how to use the React project template with ASP.NET Core 上的教程指出,构建过程使用 npm 来恢复 npm 依赖项并启动服务器。

此外,同一个文档指出需要 Node.js 来进行开发构建。

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

【讨论】:

  • 在我的开发环境中,我同时安装了 dotnet 和 npm,运行良好,我的问题是当我使用 docker 自动构建和部署时
  • 在开发环境中安装了什么并不重要。当您构建 Docker 映像时,您正在设置一个新的运行时环境,该环境需要打包所有必需的包以在任何系统上运行应用程序。这意味着您需要确保 Dockerfile 安装每个依赖项。在您的示例中,您从 microsoft/dotnet:sdk Docker 映像开始,该映像已经包含所有 .NET 内容,但您仍需要安装剩余的依赖项。
  • 但是我不能让它工作,我认为它可能与 CSProj 中存在的构建管道有关,因为在 dockerfile 中添加 NodeJs,我无法生成构建,我有一个解决方案?
  • @JoãoCota 根据您上面提供的错误消息,管道失败是因为您的 Dockerfile 在调用 dotnet publish (...) 之前没有安装 npm。因此,由于此时您的 Docker 映像中不存在 npm,因此该步骤将失败。如果您在调用 dotnet publish 之前添加几个步骤来安装 npm 和您的 npm 依赖项,那么您将遇到特定错误。
  • 但与答案链接或解释无关。
猜你喜欢
  • 2018-04-11
  • 2020-10-18
  • 2023-03-20
  • 2020-06-12
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多