我有一个VS2017(v5.18.0)解决方案,其中包含一个.NET Core 2.0控制台应用程序“ ReferenceGenerator”作为“启动”应用程序。该解决方案还包含两个.Net Core库2.0项目FwCore和LibReferenceGenerator,它们是“本地”库。我添加了Docker支持(Linux),因此添加了创建Docker应用程序所需的所有文件。我可以使用“用于Linux模式下的Windows的docker”在“ docker-compose”模式下调试应用程序。应用程序运行正常。如果尝试构建发行版本,则会收到错误消息,指出从非法路径发生了COPY。码头工人文件看起来像这样:
FROM microsoft/dotnet:2.0-runtime AS base
WORKDIR /app
FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /src
COPY ReferenceGenerator/ReferenceGenerator.csproj
ReferenceGenerator/
COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
COPY ../FwCore/FwCore/FwCore.csproj ../FwCore/FwCore/
RUN dotnet restore
ReferenceGenerator/ReferenceGenerator.csproj
COPY . .
WORKDIR /src/ReferenceGenerator
RUN dotnet build ReferenceGenerator.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish ReferenceGenerator.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ReferenceGenerator.dll"]
内容下方的行:
COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
正在导致错误:
Step 6/17 : COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
1>Service 'referencegenerator' failed to build: COPY failed: Forbidden path outside the build context: ../LibReferenceGenerator/LibReferenceGenerator.csproj ()
我已经读到不允许相对路径,就是这样。但是,编译器的输出已在项目ReferenceGenerator的bin目录中完成。我已经尝试删除引用lib的两条复制行,但是在dotnet构建阶段,构建抱怨缺少lib工程文件。
在我看来,在解决方案中包含一些“ homebuild” lib项目是很常见的情况。我是docker容器上的新手,不知道该如何解决这个问题,有人吗?
我的文件结构的其他信息如下:
/Production/ReferenceGenerator/ReferenceGenerator.sln
/Production/ReferenceGenerator/ReferenceGenerator/ReferenceGenerator.csproj
/Production/LibReferenceGenerator/LibReferenceGenerator.csproj
/Production/FwCore/FwCore/FwCore.csproj
/Production/ReferenceGenerator/ReferenceGenerator/Dockerfile
请任何人。试图帮助我的人没有成功。我完全陷在开发中了...
答案 0 :(得分:1)
答案是,没有解决方案...
如果需要库,则必须使用(私有)nuget库将它们包括在内。 这不是一个很好的解决方案,因为在调试时您没有可用的库资源,但是在构建上下文之外包含库是不可行的,我从中学到了对互联网的研究...
在微服务环境中,共享代码也应最小化,以避免团队破坏其他团队的代码。对所有希望为该问题提供解决方案的开发人员表示歉意,此外,除了使用nuget包的解决方法之外,没有其他解决方案!
答案 1 :(得分:0)
您在副本中缺少一个级别。
应为: COPY ../../LibReferenceGenerator/LibReferenceGenerator.csproj ../ LibReferenceGenerator /
答案 2 :(得分:0)
如错误所示,您不能复制构建上下文之外的文件。当您运行诸如docker image build .
之类的命令时,最后一个参数(.
)指定构建上下文。该上下文将复制到Docker引擎进行构建。除此之外的文件(例如../LibReferenceGenerator/LibReferenceGenerator.csproj
)根本不存在。
因此,为了使您的示例正常工作,您需要将构建上下文上调至一个级别才能访问LibReferenceGenerator
和FwCore
。然后,将COPY
指令的来源作为该上一级上下文的相关内容。
请注意,Dockerfile的默认位置是在您的构建上下文中名为Dockerfile
的文件。您需要移动Dockerfile,或使用-f, --file
选项指定自定义路径。