当前位置: 首页 > 知识库问答 >
问题:

复制失败:生成上下文之外的禁止路径:/应用程序编程接口。常见的AspNetCore/API。常见的AspNetCore。csproj()

汲利
2023-03-14

我有一个包含多个项目的解决方案。我想创建一个项目的docker映像,所以我通过docker支持添加了一个Dockerfile。我添加Dockerfile的项目对同一级别的其他项目具有构建依赖关系。当我尝试通过Docker运行项目时,我收到以下错误:

复制失败:生成上下文之外的禁止路径:/应用程序编程接口。常见的AspNetCore/API。常见的AspNetCore。csproj()

C: \用户\用户。nuget\packages\microsoft。visualstudio。蔚蓝色的容器。工具。目标\ 1.4.10 \生成\容器。目标(258,5):错误CTP1001:尝试构建Docker映像时出错。

Dockerfile文件:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY ["API.Customer/API.Customer.csproj", "API.Customer/"]
COPY ["../API.Common.AspNetCore/API.Common.AspNetCore.csproj", "../API.Common.AspNetCore/"]
COPY ["API.Customer.Eventing/API.Customer.Eventing.csproj", "API.Customer.Eventing/"]
COPY ["API.Customer.Errors.Database.AspNetCore/API.Customer.Errors.Database.AspNetCore.csproj", "API.Customer.Errors.Database.AspNetCore/"]
COPY ["API.Customer.Errors.AspNetCore/API.Customer.Errors.AspNetCore.csproj", "API.Customer.Errors.AspNetCore/"]
RUN dotnet restore "API.Customer/API.Customer.csproj"
COPY . .
WORKDIR "/src/API.Customer"
RUN dotnet build "API.Customer.csproj" -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "API.Customer.dll"]

启动设置。json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:5002",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Dev"
      }
    },
    "STARS.API.Customer.Schools": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Dev"
      },
      "applicationUrl": "http://localhost:5002"
    },
    "Docker": {
      "commandName": "Docker",
      "launchUrl": "{Scheme}://localhost:{ServicePort}"
    }
  }
}

如果您需要更多信息,请告诉我。

共有2个答案

常朗
2023-03-14

正如@ChrisPratt所说,如果解决方案中有多个项目,最好使用文件docker compose。yml。但是,如果出于某种原因需要直接使用Dokerfile并指定上下文,可以将以下行添加到*。csproj文件。

<PropertyGroup>
    ...
    <DockerfileContext>../..</DockerfileContext>
</PropertyGroup>

例如,<代码>。/ 返回一次。在这里检查。

桂梓
2023-03-14

您正在尝试复制API。常见的AspNetCore将项目投影到工作目录上方的目录中(。//code>)。这是不可能的。我知道你这样做是因为你需要维护相对的项目路径引用,但唯一的方法是将其他项目嵌入一个更深入的目录。例如,而不是复制API。顾客csproj到API。客户//code>,复制到foo/API。客户//code>。然后,对于您的API。常见的AspNetCore项目,您可以复制到API。常见的AspNetCore/

编辑

再想一想,这个误差很可能是由于方程的另一面造成的,但上面的部分也是相关的。简而言之,Docker有一个工作或构建目录的概念,它与运行Docker命令的目录相关。如果您在Windows上运行linux容器,那么这将变得更加有趣,因为整个工作目录实际上都被复制到运行在Hyper-V中的MobyLinux虚拟机中。

无论如何,正因为如此,您需要小心运行Docker命令的位置。如果您需要父目录的上下文,那么您不需要跑出该父目录,这样您就可以访问它,当然还有它下的项目。具有讽刺意味的是,对于单个Dockerfile,这不是您必须真正考虑的事情,因为传统上,当您直接使用Dockerfile时,您没有其他参与的应用程序。相反,当您编排多个Docker应用程序时,您传统上会使用docker-compose.yml文件,它将在所有参与的应用程序的父级。在任何一种情况下,直接在它们所在的文件夹中运行这些文件都将提供所有必要的上下文。

您的问题是您需要有效地处理这两个概念,因此在运行Docker命令时,您需要更加小心您的实际上下文。如果你有docker compose。yml,我建议运行它,而不是直接运行Dockerfile。在Visual Studio中,您只需要添加编排支持,而不是直接添加Dockerfiles。这将添加Dockerfile,但也会添加docker compose项目,然后它将向上添加docker compose。yml,而不是直接使用Dockerfile构建每个图像。

 类似资料:
  • 我有一个包含各种Go服务和库的monorepo。目录结构如下所示: 这<代码>开始。mod文件位于monorepo目录的根目录中,服务使用该文件中声明的依赖项。 我使用以下命令构建Docker图像: 当我尝试使用上述Docker命令从monorepo目录的根构建Docker图像时,我得到以下错误: 复制失败:生成上下文之外的禁止路径:/去mod() 下面是我的Dockerfile 我需要做些什么才

  • 我有以下文件夹结构: 我有我的micro-hr文件夹,其中是我的主包,我有一个本地lib,它是rabbitmq 这是我的dockerfile: docker撰写: 这是我的包裹。我的主包后端/微hr上的json: 我不知道我错在哪里,基本上我在我的主包中使用npm链接链接到我的lib,并尝试在docker中创建文件夹,但无济于事。 docker构建错误: 步骤6/10:复制/rabbitmq/包。

  • 我的本地服务器上有一个工作的Docker Compose,现在我必须转到prod,我只是复制了prod服务器上的整个目录,相同的目录结构、配置文件等。但是当我运行Docker Compose命令(Docker-Compose-f Docker-Compose.dev.yml up)时,它抛出了以下错误: 步骤 7/28 : 复制 ../../data_acquisition_survey_api/

  • 我正在尝试将一个dockerfile放入我的主启动项目的子目录中。有一个称为的依赖项项目。当dockerfile位于的根目录中时,所有文件都正常工作,但当它嵌套在的子目录中时,它将失败 这对我来说是有意义的,因为它嵌套在子目录中,所以我只是在COPY命令前面添加了一个“../”,但这会导致以下上下文异常: 好的,这也是有意义的,因为docker文档说明上下文从dockerfile所在的地方开始,但