c# - docker-compose 构建副本失败
问题描述
我正在尝试使用 docker 将我的项目上传到 Digital Ocean droplet 我被困在这个阶段,每当我运行 docker-compose build 时 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"]
码头工人-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
anddocker-compose.yaml
文件应该紧挨着 sln 和 csproj 文件。
当您在 Visual Studio 中创建新项目并将放置项目文件保留在项目文件夹中时,可能会出现此问题。确保 sln 和 csproj 在同一个文件夹中。此外,Dockerfile
和 'docker-compose.yaml` 也在同一个文件夹中。
更深层次的答案:
Dockerfile 包含有关 docker 引擎如何为您的应用程序创建 docker 映像的说明。每一行都是一层docker镜像。
从
复制
跑
命令
所有这些命令将创建一个新的 docker 镜像,由引擎缓存以供下次运行。
因为这些镜像是基于 Linux 的,并且 linux 使用 cgroup 和命名空间来创建隔离环境,这是构建 docker 的特性。此隔离环境有一个特殊文件夹,该文件夹出现在错误消息中。
推荐阅读
- sql - 在 Hana DB 中传输 4 个虚拟 SDA 表的最佳方式
- camel-cxf - Apache Camel 在调用 CXF Endpoint 时返回 NullPointerException。将骆驼从 2.X 升级到 3.0 后失败
- android - 如何更新 Firebase 实时数据库中的现有值?
- python-3.x - ImportError: cannot import name 'number' from 'test' (E:\PL\Atom\RPS.py\test.py) 是什么意思?
- python-3.x - 将文件从 tgz 提取到 tar 和从 tar 到 txt Databricks Python3 Unix/Linux
- python - 在 Pandas 中使用 Lambda 函数时,Str 对象没有属性“键”
- fortran - 线性格的状态密度的 Fortran 编码
- php - tr 标签迭代 10 次后生成新表
- java - 如何使用angular6确保用户在mysql中使用图像
- ios - PencilKit,图层以及如何放大