docker-撰写构建副本失败

docker-compose build copy failed

我正在尝试使用 docker 将我的项目上传到 Digital Ocean Droplet 我被困在这个阶段,每当我 运行 docker-compose build 时 COPY 都会失败.

Docker 文件:

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' 文件夹之后的那个路径中没有目录,它是空的。

Dockerfiledocker-compose.yaml 文件应该紧挨着 sln 和 csproj 文件。

当您在 Visual Studio 中创建新项目并将项目文件保留在项目文件夹中时,可能会发生此问题。 确保在同一个文件夹中有 sln 和 csproj。 此外,Dockerfile 和 'docker-compose.yaml` 也在同一文件夹中。

更深入的回答:

Dockerfile 包含有关 docker 引擎如何为您的应用程序创建 docker 图像的说明。 每行是一层docker图像。

来自

复制

运行

命令

所有这些命令都会创建一个新的 docker 图像,引擎会为下一个 运行 缓存这些图像。

因为这些映像是基于 Linux 的,并且 linux 使用 cgroup 和名称空间来创建隔离环境,这是构建 docker 的功能。此隔离环境有一个特殊文件夹,该文件夹出现在错误消息中。