.NET项目中如果包含tailwind.css,如何编写Docker文件和compose.yml

问题描述 投票:0回答:1

我正在尝试为我的 CRUD 应用程序设置 ASP.NET Core 8 MVC 项目。 Docker compose 与

docker init
开箱即用,运行良好。但是,当我尝试为我的前端部分添加 tailwind.css 时,Docker 在服务器映像上抛出错误。它试图从
.csproj
文件中读取配置,这是有意义的,因为错误是

错误 MSB3073:命令“npm run css:build”退出,代码为 127

我认为我的 DockerFile 甚至

compose.yml
node.js
无关。

我的问题是在我的情况下,在这种情况下运行 Docker 的方法是什么?

我需要单独的前端映像和服务器映像吗?这意味着我需要单独的 DockerFile,一个用于 Node.js,一个用于 .NET?

compose.yml

services:
  server:
    build:
      context: .
      target: development
    ports:
      - 8080:80
    depends_on:
       db:
         condition: service_healthy
    develop:
        watch:
        - action: rebuild
          path: .
    environment:
       - ASPNETCORE_ENVIRONMENT=Development
       - ASPNETCORE_URLS=http://+:80'
  db:
     image: postgres
     restart: always
     user: postgres
     secrets:
       - db-password
     volumes:
       - db-data:/var/lib/postgresql/data
     environment:
       - POSTGRES_DB=example
       - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
     expose:
       - 5432
     healthcheck:
       test: [ "CMD", "pg_isready" ]
       interval: 10s
       timeout: 5s
       retries: 5
volumes:
 db-data:
secrets:
   db-password:
     file: db/password.txt

Docker 文件

FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
ARG TARGETARCH
COPY . /source
WORKDIR /source
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
    dotnet publish -a ${TARGETARCH/amd64/x64} --use-current-runtime --self-contained false -o /app

FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS development
COPY . /source
WORKDIR /source
CMD dotnet run --no-launch-profile

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS final
WORKDIR /app
COPY --from=build /app .
USER $APP_UID
ENTRYPOINT ["dotnet", "myCoffeeScript.dll"]

.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <UpToDateCheckBuilt Include="wwwroot/css/site.css" Set="Css" />
    <UpToDateCheckBuilt Include="tailwind.config.js" Set="Css" />
  </ItemGroup>

  <Target Name="Tailwind" BeforeTargets="Build">
    <Exec Command="npm run css:build"/>
  </Target>
</Project>

最后两组是安装顺风时添加的一组。这是抛出错误的那个 (

<Exec Command="npm run css:build"/>
)

我的问题的预期结果是我可以为 ASP.NET Core 8 MVC 应用程序运行 Docker 容器,其中包括一个用于数据库的映像、一个用于服务器的映像,也许还有另一个用于前端的映像?

c# docker asp.net-core-mvc tailwind-css asp.net-core-8
1个回答
0
投票

您需要在构建步骤映像中安装node和npm。您可以使用 Alpine 包管理器的命令

apk add nodejs npm
来完成此操作。试试这个

FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
ARG TARGETARCH
RUN apk add nodejs npm
COPY . /source
WORKDIR /source
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
    dotnet publish -a ${TARGETARCH/amd64/x64} --use-current-runtime --self-contained false -o /app

FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS development
COPY . /source
WORKDIR /source
CMD dotnet run --no-launch-profile

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS final
WORKDIR /app
COPY --from=build /app .
USER $APP_UID
ENTRYPOINT ["dotnet", "myCoffeeScript.dll"]
© www.soinside.com 2019 - 2024. All rights reserved.