Можно с уверенностью сказать, что я совсем не понимаю docker. Но, учитывая, насколько это много ажиотажа, я хочу это понять. Поэтому я пытаюсь создать docker образ работающего веб-приложения, созданного в Dot Net Core 3.1.
Веб-приложение состоит из двух частей. Встроенный интерфейс angular 9 и встроенный сервер ASP. Net Core 3.1.
SPA Angular компилируется и помещается в папку / wwwroot/ во время сборки, а не встроенный. net ядро (потому что я хочу держать их отдельно).
Все это прекрасно работает на стандартном сервере IIS, на котором все это развернуто с использованием Azure Devops и CI / CD.
Сейчас. Я пытаюсь создать docker изображение этого. До сих пор я пришел к этому Dockerfile
. Который строит без каких-либо ошибок.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Backend", "backend"]
RUN dotnet restore "backend/src/HolidayPlanner.Web/HolidayPlanner.Web.csproj"
COPY . .
WORKDIR "backend/src/HolidayPlanner.Web"
RUN dotnet build "HolidayPlanner.Web.csproj" -c Release -o /app/build
# Angular
FROM node:12.2.0 as angular
WORKDIR /src
ENV PATH /app/node_modules/.bin:$PATH
COPY ["Frontend/HolidayPlanner-frontend-v2", "frontend/angular/source"]
#"outputPath": "../../Backend/src/HolidayPlanner.Web/wwwroot/",
RUN npm install -g @angular/cli
WORKDIR /src/frontend/angular/source
RUN npm install
RUN npm run build
FROM build AS publish
RUN dotnet publish "HolidayPlanner.Web.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=angular /src/frontend/Backend/src/HolidayPlanner.Web/wwwroot wwwroot
ENTRYPOINT ["dotnet", "HolidayPlanner.Web.dll"]
Это объединено с использованием много поиска в Google. Не стесняйтесь указывать на любые ошибки. Также обратите внимание, что причина, по которой я копирую Angular buildresult из другой папки, заключается в том, что Angular выводит свой результат в "outputPath": "../../Backend/src/HolidayPlanner.Web/wwwroot/",
Это потому, что они являются отдельными, и, делая это таким образом, я могу использовать ng build --watch
в VS-Code во время работы бэкэнда и вставьте фронтенд в основное приложение asp net во время выполнения. Это прекрасно работает без docker частей.
Итак, теперь к проблеме. Я не могу заставить изображение docker работать больше секунды. Я могу создать изображение с помощью docker build HolidayPlanner -t HolidayPlanner
, в результате чего будет напечатано что-то вроде Successfully built sb1e10ca071a
.
Затем, когда я пытаюсь запустить его с docker run -p 5000:5000 --name HolidayPlanner HolidayPlanner
, он печатает длинную строку случайных чисел и букв и ничего остальное. Если я наберу Docker PS
очень быстро, я вижу, что контейнер работает, но он завершается через несколько секунд. То же самое происходит, если я запускаю его из Docker UI. В настольном приложении я вижу Exited(0)
, напечатанный под изображением. Если я go войду в него, там нет логов или чего-нибудь полезного.
Есть ли логи? Вкладка «Журналы» на изображении в пользовательском интерфейсе пуста.
Как выяснить, что не так?