gpt4 book ai didi

macos - 离线时在 .net 核心的 docker 构建中使用 nuget 缓存

转载 作者:行者123 更新时间:2023-12-04 11:36:23 41 4
gpt4 key购买 nike

在锁定区域的一个新区域,我现在只能访问价格过高的 SIM 卡数据计划,我正在寻找一种方法来最小化带宽。

我有一个应用程序,它的构建有一个常规的 dockerfile,但它每次都会上线以恢复包。

我在 MacOS 上,构建过程不需要是可移植的。

由于我有一个本地 nuget 包缓存 (~/.nuget/packages),我想利用它并重新使用这些文件。

首先,我想指出从我的 IDE 进行发布并使用该结果不是这个项目的一个选项,我真的需要从源代码构建它。

也有许多关于直接或半相关情况的讨论和一些博客文章,但似乎都没有提出理想的解决方案。我做了相当广泛的搜索。如果您认为这是具有有效解决方案的现有帖子的副本,请仔细查看。

我看过的东西:

  • 我可以将 .nuget 缓存安装到卷中并在 docker 构建过程中使用它吗?答案似乎是否定的,因为 docker build 没有 -v/--volume 选项。
  • 我可以安装本地 nuget 服务器吗?我找到的唯一有效的 MacOS 解决方案是 BaGet,在尝试使其工作时,我注意到一个开放的票证,其中说在将其用作缓存时不会提取包依赖项,因此它不是一个有效的解决方案。
  • 我可以在 docker build 的一层中恢复所有包吗?可能,但这很棘手,因为导入了很多子项目,这意味着包将在更改时定期重新导入。

  • 我目前正在看的是:
  • 通过符号链接(symbolic link)使 .nuget 文件夹成为构建文件夹的一部分
  • 找到所有要包含的 fsproj 文件,然后将它们复制到 docker build
  • 的一层中
  • 使用符号链接(symbolic link)作为包源进行 dotnet 还原
  • 做一个构建,作为下一层

  • 一个问题是我无法对 fsproj 依赖项进行硬编码,并且无法从 dockerfile 中找到所有项目文件。一篇博客文章提出了一个预处理过程,在该过程中找到文件、放入存档并在 dockerfile 中展开它。

    在我开始走一些复杂的道路之前,有没有人尝试过解决这个问题?或者想出了一个很好的清洁解决方案?

    编辑:

    docker 不会访问指向构建目录之外的符号链接(symbolic link)

    最佳答案

    我必须研究的一个建议 Docker BuildKit如果你还没有这样做。 BuildKit 添加了对 Dockerfile 挂载的支持。支持various types of mounts一个是 cache适用于这种确切的场景 - 构建缓存工件,例如 NuGet 包。

    关于macos - 离线时在 .net 核心的 docker 构建中使用 nuget 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60799918/

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