docker compose生成副本失败



我正试图使用docker将我的项目上传到Digital Ocean液滴中。我陷入了这个阶段,每当我运行docker compose构建时,COPY都会失败。

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

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

在Visual Studio中创建新项目并将put项目文件保留在项目文件夹中时,可能会出现此问题。请确保sln和csproj位于同一文件夹中。此外,Dockerfile和"docker compose.yaml"也在同一文件夹中。

更深层次的答案:

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

来自

复制

运行

CMD

所有这些命令都将创建一个新的docker映像,该映像由引擎缓存以备下次运行。

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

最新更新