Как настроить Nuxt. js в качестве SPA с. NET Core Web Api в одном Docker контейнере? - PullRequest
0 голосов
/ 18 апреля 2020

Как мне создать файл docker -compose.yml, который будет запускать мой Nuxt. js SPA и. NET Core Web API в 1 контейнере? Пока у меня есть Web Api, работающий в docker, и я могу отправлять ему команды. Но каждый раз, когда я пытаюсь добавить Nuxt SPA в docker -compose.yml, Visual Studio выдает мне странную ошибку (см. Конец поста).

Это то, что у меня пока есть:

docker -compose.yml

version: '3.4'
services:
    webapi:
        container_name: webapi
        image: projectname/projectname_webapi
        build:
            context: .
            dockerfile: src/WebAPI/Dockerfile
        restart: always
        ports:
          - "5500:80"
        environment:
            ASPNETCORE_ENVIRONMENT: Development 

. Net Core Dockerfile веб-API

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
COPY . .
RUN dotnet test

FROM build AS publish
WORKDIR /src/WebAPI
RUN dotnet publish "WebAPI.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebAPI.dll"]

Nuxt. js Dockerfile SPA

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 7000
CMD ["nginx", "-g", "daemon off;"]

Ошибка, которую я получаю, если добавить следующее к docker -compose.yml:

     webpui:
        container_name: webpui
        image: projectname/projectname_webui
        build:
            context: .
            dockerfile: src/WebUI/Dockerfile
        restart: always
        ports:
            - '7000:7000'
        command: ["npm", "run", "serve"]

Ошибка:

Error   MSB4018 The "GetServiceReferences" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
File name: 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
   at Microsoft.VisualStudio.Containers.Tools.Common.Prerequisites.DockerForWindowsDriveSharingPrerequisite.<EvaluateAsync>d__0.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start[TStateMachine](TStateMachine& stateMachine)
   at Microsoft.VisualStudio.Containers.Tools.Common.Prerequisites.DockerForWindowsDriveSharingPrerequisite.EvaluateAsync(CancellationToken cancellationToken)
   at Microsoft.Docker.Prerequisites.DockerForWindowsDriveSharingPrerequisite.<EvaluateAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Docker.Prerequisites.DockerCompositePrerequisite.<EvaluateAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Docker.BuildTasks.DockerBuildTask.<EvaluateBuildPrerequisitesAsync>d__32.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Docker.BuildTasks.DockerBuildTask.<ExecuteAsync>d__30.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Docker.BuildTasks.DockerBuildTask.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
    docker-compose  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets  202 

Любые предложения приветствуются!

1 Ответ

0 голосов
/ 07 мая 2020

Указанная выше проблема c - это отсутствующая Newtonsoft. Json DLL. Найдите, какой проект (ы) в вашем решении ссылаются на этот пакет, и используйте NuGet для установки пакета «Newtonsoft. Json» в проект (ы). Если после установки пакета ошибка все еще не устранена, попробуйте понизить этот пакет до предыдущей версии, а затем обновить его до текущей стабильной версии. (Похоже, что это исправляет ссылки.) Для получения дополнительной информации см. Ответы на этот вопрос .

Как только вы пройдете этот пункт, вы сможете узнать, есть ли у вас другие вопросы на пути к ответу на ваш первоначальный вопрос. Удачи!

...