gpt4 book ai didi

c# - COPY失败:构建上下文之外的禁止路径:../API.Common.AspNetCore/API.Common.AspNetCore.csproj()

转载 作者:行者123 更新时间:2023-12-02 18:52:04 39 4
gpt4 key购买 nike

我有一个包含多个项目的解决方案。我想创建一个项目的Docker镜像,因此我已经通过Docker支持添加了一个Dockerfile。我添加了Dockerfile的项目已在同一级别上依赖于其他项目。当我尝试通过Docker运行项目时,出现以下错误:

COPY failed: Forbidden path outside the build context: ../API.Common.AspNetCore/API.Common.AspNetCore.csproj ()

C:\Users\user.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.4.10\build\Container.targets(258,5): error CTP1001: An error occurred while attempting to build Docker image.


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"]
LaunchSettings.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}"
}
}
}
如果您需要更多信息,请告诉我。

最佳答案

您正在尝试将API.Common.AspNetCore项目复制到工作目录(../)上方的目录中。那不可能我了解您正在执行此操作,因为您需要维护相对的项目路径引用,但是唯一的方法是将其他项目再嵌入一个目录。例如,不要将API.Customer.csproj复制到API.Customer/,而是复制到foo/API.Customer/。然后,对于您的API.Common.AspNetCore项目,您可以仅复制到API.Common.AspNetCore/

编辑

多考虑这一点,该错误很可能是由于方程式的相反侧引起的,但是上面的部分也很重要。简而言之,Docker具有工作目录或构建目录的概念,该目录与运行Docker命令的目录相关。如果您正在Windows上运行linux容器,那么这将变得更加有趣,因为整个工作目录实际上都被复制到了在Hyper-V中运行的MobyLinux VM中。

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

您的问题是您有效地滑过了这两个概念,因此您在运行Docker命令时需要更加小心实际上下文。如果您确实有docker-compose.yml,建议您直接运行它,而不是直接运行Dockerfile。在Visual Studio中,您只需要添加业务流程支持,而不是直接添加Dockerfile。这将添加Dockerfile,但还将添加docker-compose项目,然后将创建docker-compose.yml,而不是直接使用Dockerfile构建每个镜像。

关于c# - COPY失败:构建上下文之外的禁止路径:../API.Common.AspNetCore/API.Common.AspNetCore.csproj(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56185503/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com