Нужна помощь с Dockerfile и Kubernetes для сервиса .AspNetCore - PullRequest
1 голос
/ 22 марта 2019

Сбой сборки Docker из-за следующей ошибки:

Не удалось скопировать COPY: CreateFile \? \ C: \ ProgramData \ Docker \ tmp \ docker-builder117584470 \ Aeros.Services.Kubernetes \ Eros.Services.Kubernetes.csproj: системе не удается найти указанный путь.

Я довольно новичок в докере и перешел к базовому шаблону проекта, который настраивается при создании шаблона проекта контейнера Kubernetes., так что я бы подумал, что это будет работать из коробки, но я ошибаюсь.

У меня возникают проблемы при попытке выяснить, что он пытается из-за структуры временного каталога и почему это так.терпит неудачу.Кто-нибудь может предложить некоторую помощь?Я провел некоторый поиск, а другие сказали, что шаблон докера по умолчанию был неправильным в Visual Studio, но я не вижу, чтобы какие-либо файлы копировались во временный каталог для начала, поэтому выясняю, что происходит.довольно проблематично в то время.

Вот файл docker, единственное, что я добавил, это аргумент publishingProfile, так что я могу сказать ему, какой профиль использовать в шагах Build и Publish:

ARG publishingProfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["Aeros.Services.Kubernetes/Aeros.Services.Kubernetes.csproj", "Aeros.Services.Kubernetes/"]

RUN dotnet restore "Aeros.Services.Kubernetes/Aeros.Services.Kubernetes.csproj"
COPY . ./
WORKDIR "/src/Aeros.Services.Kubernetes"
RUN dotnet build "Aeros.Services.Kubernetes.csproj" -c $publishingProfile -o /app

FROM build AS publish
RUN dotnet publish "Aeros.Services.Kubernetes.csproj" -c $publishingProfile -o /app

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

Я не трогал файл yaml, но если вам это нужно, я также могу предоставить его.Опять же, все, что я сделал с этим, это добавление нескольких пакетов NuGet в ссылку на проект.Сборка в VisualStudio работает нормально, но команда docker:

docker build . --build-arg publishingProfile=Release

терпит неудачу с ошибкой, упомянутой выше.

Может ли кто-то быть настолько любезен, чтобы предложить какое-то просветление?Спасибо!

Редактировать 1: Я выполняю это из папки проекта через командную строку PowerShell.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Комментарии Леандро помогли найти решение.

Итак, сначала краткое изложение этой команды COPY, она принимает два параметра, источник и назначение. В шаблоне для Dockerfile для Visual Studio он содержит расположение папки .csproj-файла, который он пытается скопировать. В моем случае команда читается следующим образом:

COPY ["Aeros.Services.Kubernetes/Aeros.Services.Kubernetes.csproj", "Aeros.Services.Kubernetes/"]

Итак, он ищет мой файл Aeros.Services.Kubernetes.csproj в папке проекта Aeros.Services.Kubernetes и копирует его в папку Aeros.Services.Kubernetes в папке src Docker.

Проблема в том, что если вы используете настройку по умолчанию, ваш dockerfile включается в папку проекта. Если вы выполняете сборку Docker из папки проекта, синтаксис команды COPY фактически находится в неверном месте файла. Например, если ваш проект - TestApp.csproj, расположенный в папке проекта TestApp, и вы выполняете команду сборки Docker для файла docker в той же папке, синтаксис этой команды COPY:

COPY ["TestApp/TestApp.csproj", "TestApp/"]

фактически ищет: TestApp / TestApp / TestApp.csproj.

Правильный синтаксис команды COPY в этой ситуации должен быть:

COPY ["TestApp.csproj", "TestApp/"]

, поскольку вы уже находитесь в папке проекта TestApp.

Другая проблема с шаблоном по умолчанию, который может беспокоить некоторых, заключается в том, что он также не копирует веб-файлы для проекта, поэтому, как только вы пройдете шаги восстановления COPY и dotnet, вы потерпите неудачу во время BUILD с:

CSC: ошибка CS5001: программа не содержит статический метод Main подходит для точки входа

Это решается добавлением:

COPY . ./

после вашей команды восстановления RUN dotnet для копирования ваших файлов.

После того, как эти части были учтены в предоставленном шаблоне по умолчанию, все должно работать как положено.

Спасибо за помощь!

0 голосов
/ 22 марта 2019

В какой строке возникает проблема? Я не помню, показывает ли это сборка докера.

Где вы выполняете эту сборку? Проблема в том, что он не находит файл, который вы пытаетесь скопировать. Он должен быть локальным по отношению к месту выполнения команды.

Я видел сейчас, проблема на первой копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...