У меня есть приложение с ядром dotnet с авторизацией. Поскольку политика компании не позволяет хранить токены Bearer на внешнем интерфейсе, я хочу запустить его через контроллер MVC. Тем не менее, я запускаю SPA с Vue.js, который генерируется. Поэтому я должен вернуть сгенерированный index.cshtml из контроллера. Это работает локально в Kestrel, но как только я разверну его в Docker-контейнере, он больше не будет работать - я полагаю, это как-то связано с тем, как MVC ожидает, что файлы будут где-то, и это не соответствует тому, как Docker обрабатывает это.
Я пробовал разные способы найти файл в модуле. Приложение работает стандартно в / app; и SPA был первоначально развернут в / app / wwwroot. Я не мог найти способ заставить контроллер MVC читать из этой папки. Я изменил веб-пакет vue.js, чтобы создать Index.cshtml и все необходимые ресурсы в / app / View / [ControllerName], но это тоже не сработало.
Dockerfile:
FROM microsoft/dotnet:2.2-aspnetcore-runtime
EXPOSE 80
# Create app directory
WORKDIR /app
# Copy files from the artifact staging folder on agent
COPY <ProjectName>/out .
RUN apt-get update -y && apt-get install ca-certificates -y && rm -rf /var/lib/apt/lists/*
ADD certificate.crt
ADD certificate2.crt
ADD certificate3.crt
RUN update-ca-certificates
ENTRYPOINT ["dotnet", "<ProjectName>.dll"]
Ожидаемый результат: загрузка SPA.
Фактические результаты: часто ошибки MVC, что он не может найти файл index.cshtml в разных местах. И он всегда смотрит в неправильные места, хотя я пытаюсь указать это в правильном направлении. Это было с попыткой указать на vue.js в / app / wwwroot; с созданием SPA в / Views / [ControllerName] кажется, что сервер сборки не собирает его правильно, чтобы поместить его туда, и происходят другие странные вещи. Одно время, по-видимому, он генерировал HomeController; которого у проекта нет.