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' 文件夹之后的那个路径中没有目录,它是空的。
Dockerfile
和 docker-compose.yaml
文件应该紧挨着 sln 和 csproj 文件。
当您在 Visual Studio 中创建新项目并将项目文件保留在项目文件夹中时,可能会发生此问题。
确保在同一个文件夹中有 sln 和 csproj。
此外,Dockerfile
和 'docker-compose.yaml` 也在同一文件夹中。
更深入的回答:
Dockerfile 包含有关 docker 引擎如何为您的应用程序创建 docker 图像的说明。
每行是一层docker图像。
来自
复制
运行
命令
所有这些命令都会创建一个新的 docker 图像,引擎会为下一个 运行 缓存这些图像。
因为这些映像是基于 Linux 的,并且 linux 使用 cgroup 和名称空间来创建隔离环境,这是构建 docker 的功能。此隔离环境有一个特殊文件夹,该文件夹出现在错误消息中。
我正在尝试使用 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' 文件夹之后的那个路径中没有目录,它是空的。
Dockerfile
和 docker-compose.yaml
文件应该紧挨着 sln 和 csproj 文件。
当您在 Visual Studio 中创建新项目并将项目文件保留在项目文件夹中时,可能会发生此问题。
确保在同一个文件夹中有 sln 和 csproj。
此外,Dockerfile
和 'docker-compose.yaml` 也在同一文件夹中。
更深入的回答:
Dockerfile 包含有关 docker 引擎如何为您的应用程序创建 docker 图像的说明。 每行是一层docker图像。
来自
复制
运行
命令
所有这些命令都会创建一个新的 docker 图像,引擎会为下一个 运行 缓存这些图像。
因为这些映像是基于 Linux 的,并且 linux 使用 cgroup 和名称空间来创建隔离环境,这是构建 docker 的功能。此隔离环境有一个特殊文件夹,该文件夹出现在错误消息中。