我正在尝试为我的 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 容器,其中包括一个用于数据库的映像、一个用于服务器的映像,也许还有另一个用于前端的映像?
您需要在构建步骤映像中安装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"]