macos - 离线时在带有 .net 核心的 docker 构建中使用 nuget 缓存
问题描述
在锁定区域的新区域,我现在只能访问价格过高的 sim 卡数据计划,我正在寻找一种方法来最小化带宽。
我有一个应用程序,它的构建有一个常规的 dockerfile,但它每次都会上线恢复包。
我在 MacOS 上,构建过程不需要是可移植的。
由于我有一个本地 nuget 包缓存(~/.nuget/packages),我想利用它并重新使用这些文件。
首先,我想指出,从我的 IDE 进行发布并使用该结果不是这个项目的选项,我真的需要从源代码构建它。
也有很多关于直接或半相关情况的讨论和一些博客文章,似乎都没有提出理想的解决方案。我做了相当广泛的搜索。如果您认为这是具有有效解决方案的现有帖子的副本,请仔细查看。
我看过的东西:
- 我可以将 .nuget 缓存挂载到一个卷中并在 docker 构建过程中使用它。答案似乎是否定的,因为 docker build 没有 -v / --volume 选项。
- 我可以安装本地 nuget 服务器吗?我发现的唯一有效的 MacOS 解决方案是 BaGet,在尝试使其工作时,我注意到一个开放的票证,上面说在将其用作缓存时不会提取包依赖项,因此它不是一个有效的解决方案。
- 我可以在 docker build 的一层中恢复所有包吗?可能,但这很棘手,因为导入了很多子项目,这意味着包将在更改时定期重新导入。
我目前正在查看的是:
- 通过符号链接使 .nuget 文件夹成为构建文件夹的一部分
- 找到所有要包含的 fsproj 文件,然后将它们复制到 docker build 的一层
- 使用符号链接作为包源进行 dotnet 还原
- 做一个构建,作为下一层
一个问题是我无法对 fsproj 依赖项进行硬编码,并且无法从 dockerfile 中找到所有项目文件。一篇博客文章建议了一个预处理过程,在该过程中找到文件,将其放入存档中,然后在 dockerfile 中展开它。
在我开始走上复杂的道路之前,有没有人尝试过解决这个问题?还是想出了一个好的清洁解决方案?
编辑:
docker 不会访问指向构建目录之外的符号链接
解决方案
如果您还没有这样做,我必须研究Docker BuildKit的一个建议。BuildKit 添加了对 Dockerfile 挂载的支持。它支持各种类型的挂载,其中一种是用于此确切场景的缓存- 构建缓存工件,例如 NuGet 包。
推荐阅读
- entity-framework - Entity Framework 6 中具有多个记录集的存储过程
- javascript - Google Sign in 不允许多个用户,因此请使用 react-native google sign in 登录
- javascript - 使用 Ionic React App 连接到 MongoDB 集群
- javascript - 在提供程序中使用函数缺少以前的状态 - nextjs
- android - 如何将数据从 ArrayList 显示到 RecyclerView Android?
- matplotlib - 用相同颜色为点周围的空间着色
- r - 如何为图表中的边距和覆盖标签调整 RMarkdown
- html - 我想在类选择器中添加数组元素
- amazon-web-services - CloudSearch 分页超过 10000 条记录
- reactjs - React url-loader 扩展问题(加载文件未设置类型)