просто немного поиграю. Я получил решение Visual Studio, содержащее 3 проекта. Все три необходимы. Один проект («один») - это пользовательский интерфейс приложения. Он, конечно, содержит c файлов в wwwroot.
Я хочу докеризировать приложение. Dockerfile здесь работает. Затем я загружаю это изображение через kubernetes на сервер Ubuntu.
Нет проблем, контейнер работает и обслуживает запросы.
Но он вообще не обслуживает файлы stati c. Все эти файловые запросы приводят к ошибке 404 HTTP. Веб-сайт выглядит как rubbi sh (но загружается, хотя).
Итак, я вошел в контейнер и начал наблюдать за содержимым / app. Здесь нет каталога с именем "wwwroot". Тоже не подкаталоги. Я не уверен, если каталог wwwroot принадлежит здесь? Или каталог включен в dll приложения?
После большого поиска (также нашел несколько полезных вопросов здесь, в StackOverflow), я обнаружил, что файлы включаются в процесс сборки автоматически. Нет необходимости определять их отдельно в файле csproj. Но если я это сделаю, это приведет к ошибке типа «Включены дубликаты файлов» или что-то в этом роде.
Вот файл Docker:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY one/one.csproj one/
COPY two/two.csproj two/
COPY three/three.csproj three/
COPY . ./
WORKDIR "/src/one"
RUN dotnet build -c Release -o /app
WORKDIR "/src/two"
RUN dotnet build -c Release -o /app
WORKDIR "/src/three"
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "one.dll"]
Да, я использую UseStaticFiles:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
// IMPORTANT: This session call MUST go before UseMvc()
app.UseSession();
app.UseStaticFiles();
...
И к файлам stati c (в основном) обращаются с правильной чувствительностью к регистру. Но, как я уже сказал, нет файлов stati c. Доступ к файлам
. В приложениях "Виды" мое приложение включает в себя CSS файлы, подобные этим:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="~/framework/1.css">
<link rel="stylesheet" href="~/framework/2.css" media="screen,projection">
...
Во время работы внутри docker это приводит к HTML Выводу этого:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/framework/1.css">
<link rel="stylesheet" href="/framework/2.css" media="screen,projection">
...
См. Отсутствующую тильду ~?
Как можно узнать c файлы будут включены в docker изображение?
Спасибо! xola