我有一个VS2017(v5.18.0(解决方案,其中包含一个.NET Core 2.0控制台应用程序"ReferenceGenerator"作为"启动"应用程序。该解决方案还包含两个.Net Core lib 2.0项目FwCore和LibReferenceGenerator,它们是"本土"的库。我添加了 docker 支持 (Linux(,因此添加了创建 docker 应用程序所需的所有文件。我可以使用"Linux 模式下的 docker for windows"在"docker-compose"模式下调试应用程序。并且该应用程序工作正常。如果我尝试构建发布版本,则会收到一个错误,指出 COPY 发生在非法路径。docker 文件如下所示:
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 目录中完成。我已经尝试删除引用库的两个复制行,但随后构建抱怨在 dotnet 构建阶段缺少库项目文件。
在我看来,将一些"自制"库项目包含在解决方案中似乎是一种非常普遍的情况。我是 docker 容器上的新手,我不知道如何解决这个问题,有人吗?
附加信息 我的文件结构如下所示:
/Production/ReferenceGenerator/ReferenceGenerator.sln
/Production/ReferenceGenerator/ReferenceGenerator/ReferenceGenerator.csproj
/Production/LibReferenceGenerator/LibReferenceGenerator.csproj
/Production/FwCore/FwCore/FwCore.csproj
/Production/ReferenceGenerator/ReferenceGenerator/Dockerfile
请任何人。那些试图帮助我的人没有成功。我完全陷入了开发中。
答案是,没有解决方案...
如果需要库,则必须使用(专用(nuget 库包含它们。 这不是一个简洁的解决方案,因为在调试时您没有可用的库源代码,但在构建上下文之外包含库是我不行的,我在研究互联网时学到了......
同样在微服务环境中,共享代码应该被缩小,以避免团队破坏其他团队的代码。对于所有喜欢解决此问题的开发人员,再次除了使用 nuget 包的解决方法之外,
没有!正如错误所说,您无法复制存在于构建上下文之外的文件。当你运行像docker image build .
这样的命令时,最后一个参数 (.
( 指定构建上下文。该上下文将复制到 Docker 引擎进行构建。除此之外的文件(例如,../LibReferenceGenerator/LibReferenceGenerator.csproj
(根本不存在。
因此,要使您的示例正常工作,您需要将构建上下文向上调整一个级别才能访问LibReferenceGenerator
和FwCore
。然后,使COPY
指令的来源相对于该一级上下文。
请注意,Dockerfile 的默认位置是构建上下文中名为Dockerfile
的文件。您需要移动 Dockerfile,或使用-f, --file
选项指定自定义路径。
Docker 镜像构建文档
副本中缺少一个级别。
它应该是: 复制。。/../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/