【问题标题】:Docker File - Skipping Project. Because it was not foundDocker 文件 - 跳过项目。因为没找到
【发布时间】:2023-03-20 12:16:01
【问题描述】:

我在一个解决方案中有 3 个项目。

[解决方案] 'BuySellApi'(3 个项目) | +-- [BuySellApi] | | | +--- BuySellApi.csproj (这个项目包含 Docker 文件) | +-- [BuySellApi.Core] | | | +--- BuySellApi.Core.csproj | +-- [BuySellApi.Data] | +--- BuySellApi.Data.csproj 1. BuySellApi.csproj -> API 2. BuySellApi.Data/BuySellApi.Data.csproj -> 模型 3. BuySellApi.Core/BuySellApi.Core.csproj -> 数据访问

我正在尝试通过在 Dockerfile

中指定以下命令来使用 Docker 构建它
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["BuySellApi.csproj", "./"]
COPY ["BuySellApi.Data/BuySellApi.Data.csproj", "./"]
COPY ["BuySellApi.Core/BuySellApi.Core.csproj", "./"]
RUN dotnet restore "./BuySellApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "BuySellApi.csproj" -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "BuySellApi.dll", "--server.urls", "http://0.0.0.0:5000"]

运行以下命令后

docker build -t cog/buysellapi .

我收到如下错误:

e:\Apps\trunk\BuySell\BuySellApi>docker build -t cog/buysellapi .
Sending build context to Docker daemon  19.15MB
Step 1/19 : FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
 ---> ce06b36fcba4
Step 2/19 : WORKDIR /app
 ---> Using cache
 ---> 184385dc16fb
Step 3/19 : EXPOSE 5000
 ---> Using cache
 ---> 0e0cdd17e04d
Step 4/19 : ENV ASPNETCORE_URLS=http://+:5000
 ---> Using cache
 ---> 54cee58d679f
Step 5/19 : FROM microsoft/dotnet:2.2-sdk AS build
 ---> a4974ac66bfc
Step 6/19 : WORKDIR /src
 ---> Using cache
 ---> 7f9a2990f973
Step 7/19 : COPY ["BuySellApi.csproj", "./"]
 ---> Using cache
 ---> d526083ece6d
Step 8/19 : COPY ["BuySellApi.Data/BuySellApi.Data.csproj", "./"]
COPY failed: stat /mnt/sda1/var/lib/docker/tmp/docker-builder475321395/BuySellApi.Data/BuySellApi.Data.csproj: no such file or directory

它没有复制 DataCore 层。当我为单个项目的解决方案尝试相同的事情时,它工作正常。

【问题讨论】:

  • 您能否证明 BuySellApi.Data/BuySellApi.Data.csproj 确实与 Dockerfile 处于同一级别?另外,如果您有 .dockerignore 可以发布内容吗?
  • Data 和 Core 是独立的项目,它们在 API 项目中被引用。 API项目有dockerfile
  • 如果您尝试复制它,那么它必须存在。否则你会得到这个错误。所以也许你需要重构你的项目
  • 那么如何使用 1 个轮胎 - 多层架构?
  • 如果您真的需要帮助,请发布您的文件夹结构。大多数时候,对应用程序进行 docker 化不仅仅意味着添加 Dockerfile。其他时候你只需要有点聪明,把你的 Dockerfile 放在不同的级别,从那里可以看到所有必要的文件。

标签: docker .net-core dockerfile


【解决方案1】:

在我的情况下,找不到项目文件,因为我正在构建一个 linux 容器,并且由于某种原因,项目文件名及其路径具有不同的字母大小写在文件系统中。

【讨论】:

  • 这应该更高!
【解决方案2】:

根据您的输入,我建议使用以下文件夹结构和 Dockerfile。

[Solution] 'BuySellApi' (3 Projects)
  |
  +-- Dockerfile
  | 
  +-- [BuySellApi]
  |    |
  |    +--- BuySellApi.csproj
  |
  +-- [BuySellApi.Core]
  |    |
  |    +--- BuySellApi.Core.csproj
  |
  +-- [BuySellApi.Data]
       |
       +--- BuySellApi.Data.csproj

Dockerfile

    FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
    WORKDIR /app
    EXPOSE 5000
    ENV ASPNETCORE_URLS=http://+:5000

    FROM microsoft/dotnet:2.2-sdk AS build
    WORKDIR /src
    COPY . .
    RUN dotnet restore ". BuySellApi/BuySellApi.csproj"
    WORKDIR "/src/BuySellApi"
    RUN dotnet build "BuySellApi.csproj" -c Release -o /app

    FROM build AS publish
    WORKDIR "/src/BuySellApi"
    RUN dotnet publish "BuySellApi.csproj" -c Release -o /app

    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "BuySellApi.dll", "--server.urls", "http://0.0.0.0:5000"]

【讨论】:

    【解决方案3】:

    正如@Mihai 建议的那样

    我将我的 Dockerfile 直接移动到解决方案文件下,并对其进行了一些更改,如下所示:

    FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
    WORKDIR /app
    EXPOSE 5000
    ENV ASPNETCORE_URLS=http://+:5000
    
    FROM microsoft/dotnet:2.2-sdk AS build
    WORKDIR /src
    COPY ["BuySellApi/BuySellApi.csproj", "BuySellApi/"]
    COPY ["BuySellApi.Core/BuySellApi.Core.csproj", "BuySellApi.Core/"]
    COPY ["BuySellApi.Data/BuySellApi.Data.csproj", "BuySellApi.Data/"]
    RUN dotnet restore "BuySellApi/BuySellApi.csproj"
    COPY . .
    WORKDIR "/src/BuySellApi"
    RUN dotnet build "BuySellApi.csproj" -c Release -o /app
    
    FROM build AS publish
    RUN dotnet publish "BuySellApi.csproj" -c Release -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "BuySellApi.dll", "--server.urls", "http://0.0.0.0:5000"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2021-06-09
      • 2014-12-25
      • 2023-03-09
      • 2019-02-19
      • 2019-09-07
      • 2021-12-05
      相关资源
      最近更新 更多