docker - не удалось создать копию сборки - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь загрузить свой проект в дроплет Digital Ocean, используя docker Я застреваю на этом этапе, когда COPY завершается неудачно, когда я запускаю docker -compose build.

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 ["iCoose.API/iChoose.API.csproj", "iCoose.API/"]
COPY ["iChoose.Business.Entities/iChoose.Business.Entities.csproj", "iChoose.Business.Entities/"]
COPY ["iChoose.Business.Services/iChoose.Business.Services.csproj", "iChoose.Business.Services/"]
COPY ["iChoose.Common.Core/iChoose.Common.Core.csproj", "iChoose.Common.Core/"]
COPY ["iChoose.DataAccess.Data/iChoose.DataAccess.Data.csproj", "iChoose.DataAccess.Data/"]
RUN dotnet restore "iCoose.API/iChoose.API.csproj"
COPY . .
WORKDIR "/src/iCoose.API"
RUN dotnet build "iChoose.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "iChoose.API.csproj" -c Release -o /app/publish

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

docker -compose.yml:

#docker-compose

version: '2'

services:
  app:
    build:
      context:  ./
      dockerfile: Dockerfile
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - '80:80'
      - '443:443'
    links:
      - app
    restart: always
    environment:
      DOMAINS: 'domain.com -> http://app:5000'
      STAGE: 'production'

Когда я запускаю команду 'docker -compose build' в терминале серверов, он начинает сборку, пока не доберется до Первая команда COPY, где я получаю:

ERROR: Service 'app' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder987069796/iCoose.API/iChoose.API.csproj: no such file or directory.

Я проверил файлы, и в папке с этим каталогом нет папки после tmp, которая пуста.

1 Ответ

1 голос
/ 03 марта 2020

Файлы Dockerfile и docker-compose.yaml должны находиться рядом с файлами sln и csproj.

При создании нового проекта в Visual Studio и оставлении файла проекта в папке проекта эта проблема может возникнуть , Убедитесь, что у вас есть sln и csproj в одной папке. Кроме того, Dockerfile и 'docker -compose.yaml` в той же папке тоже.

Более глубокий ответ:

Dockerfile содержит инструкции для движка docker о том, как создать изображение docker для вашего приложения. Каждая строка представляет собой слой docker image.

FROM

COPY

RUN

CMD

Все эти команды будут созданы новый docker образ, который кешируется механизмом для следующего запуска.

Поскольку эти образы основаны на Linux и linux использует cgroup и пространства имен для создания изолированной среды, которая является функцией, для которой docker построен. В этой изолированной среде есть специальная папка, которая появляется в сообщении об ошибке.

...